鍍金池/ 問答/Java  PHP  網(wǎng)絡(luò)安全  HTML/ JS 循環(huán)-陷入邏輯死區(qū),求解答。

JS 循環(huán)-陷入邏輯死區(qū),求解答。

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 ,如果他的個數(shù)大于0 就遍歷miniCartListArr ,小于等于0 就直接把傳遞進(jìn)來的opt推送到臨時空數(shù)組里?;氐奖闅v里面,我的目的是對比傳遞進(jìn)來的對象ID 和遍歷的當(dāng)前ID 做比較,如果相同就push 傳遞進(jìn)來的,不相同就push 當(dāng)前遍歷的對象,最后在把 新的tempArr(和miniCartListArr的區(qū)別就是多一個對象或者少一個對象,也有可能是改變其中一個對象) 存儲起來。

但是現(xiàn)在,發(fā)現(xiàn)第一次是push 進(jìn)去了,后面就沒有PUSH進(jìn)去,函數(shù)是出發(fā)了的,但是有問題。

寫到這個地方遇到個小問題, 繞進(jìn)去出不來了。求大佬思路。

傳入?yún)?shù)格式
{
    skuId: 201108293321,
    price: 2.89,
    countNum: 1
}

每次傳入的參數(shù)對象就是這樣的。

回答
編輯回答
哚蕾咪

如果評論里的邏輯是對的。應(yīng)該做有改無增的操作,而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
2017年6月26日 09:17
編輯回答
神曲
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) { // 當(dāng)opt在mincarListArr中時,使用opt替換
        data[opt.skuId] = true
        tempArr.push(opt)
      } else {
        tempArr.push($item)
      }
    })
    // 當(dāng)opt不在mincarListArr中時,把opt添加在tmpArr的最后
    if (!data[opt.skuId]) {
      opt.countNum = 1
      tempArr.push(opt)
    }
  } else {
    opt.countNum = 1
    tempArr.push(opt)
  }
  this.setMiniCartListArr(tempArr)
}
2018年4月20日 22:45