JS 循环-陷入逻辑死区,求解答。

发布于 2022-09-06 08:41:54 字数 999 浏览 18 评论 0

dataHandler(opt){
      const miniCartListArr = [...this.miniCartListArr]
      let tempArr = []
      let data = {};
      if (miniCartListArr.length > 0) {
        miniCartListArr.forEach((item, idx) => {
          let $item = item;
          if ($item.skuId == opt.skuId) {
            data[opt.skuId] = true
            tempArr.push(opt)
          } else {
            tempArr.push($item)
          }
        })
      } else {
        opt.countNum = 1
        tempArr.push(opt)
      }
      this.setMiniCartListArr(tempArr)
    }

我是取到miniCartListArr ,如果他的个数大于0 就遍历miniCartListArr ,小于等于0 就直接把传递进来的opt推送到临时空数组里。回到遍历里面,我的目的是对比传递进来的对象ID 和遍历的当前ID 做比较,如果相同就push 传递进来的,不相同就push 当前遍历的对象,最后在把 新的tempArr(和miniCartListArr的区别就是多一个对象或者少一个对象,也有可能是改变其中一个对象) 存储起来。

但是现在,发现第一次是push 进去了,后面就没有PUSH进去,函数是出发了的,但是有问题。

写到这个地方遇到个小问题, 绕进去出不来了。求大佬思路。

传入参数格式
{
    skuId: 201108293321,
    price: 2.89,
    countNum: 1
}

每次传入的参数对象就是这样的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

樱花细雨 2022-09-13 08:41:54
dataHandler(opt){
  const miniCartListArr = [...this.miniCartListArr]
  let tempArr = []
  let data = {};
  if (miniCartListArr.length > 0) {
    miniCartListArr.forEach((item, idx) => {
      let $item = item;
      if ($item.skuId == opt.skuId) { // 当opt在mincarListArr中时,使用opt替换
        data[opt.skuId] = true
        tempArr.push(opt)
      } else {
        tempArr.push($item)
      }
    })
    // 当opt不在mincarListArr中时,把opt添加在tmpArr的最后
    if (!data[opt.skuId]) {
      opt.countNum = 1
      tempArr.push(opt)
    }
  } else {
    opt.countNum = 1
    tempArr.push(opt)
  }
  this.setMiniCartListArr(tempArr)
}
溇涏 2022-09-13 08:41:54

如果评论里的逻辑是对的。应该做有改无增的操作,而id不同的时候你并没有push。

// 简化版本
var miniCartListArr = []
var miniId = {}
function dataHandler (opt) {
    if (miniId[opt.skuId] !== undefined) {
        // 有改
        miniCartListArr[miniId[opt.skuId]] = opt
    } else {
        // 无增
        // 存 id:索引,方便下次有改
        miniId[opt.skuId] = miniCartListArr.length
        miniCartListArr.push(opt)
    }
}

arr2 = [...arr1]
这么写并不是个真的深拷贝。

var arr1 = [{name:1}]
arr2 = [...arr1]
arr2[0].name = 2
arr1[0].name // 1
arr1 === arr2 //false
arr1[0] === arr2[0] //true
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文