在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ js數(shù)組已經(jīng)實(shí)現(xiàn)深拷貝,但是修改其中一個(gè)數(shù)組的值,其他數(shù)組的值會(huì)改變?

js數(shù)組已經(jīng)實(shí)現(xiàn)深拷貝,但是修改其中一個(gè)數(shù)組的值,其他數(shù)組的值會(huì)改變?

_createProps: function (props){
    let colProp = [], rowProp = [], propsAry = [], temp = [];

    if (props[0]){
      props[0].childsCurGoods.forEach(function(n,i){
        colProp.push({id:n.id,name:n.name,buyNum:0});
      });
      propsAry = colProp;
      if (props[1]){
            props[1].childsCurGoods.forEach(function (n, i) {
             
              temp[i] = [];
              for (let j = 0; j < colProp.length;j++){
                temp[i].push(colProp[j]);
              }
              rowProp.push({ id: n.id, name: n.name, child: temp[i]})
            });

            propsAry = rowProp;
          }
    }
    return propsAry;
  }```
在小程序某一頁(yè)面有這么一函數(shù),目的是將一段數(shù)據(jù)過(guò)濾我需要的如下數(shù)據(jù)格式:

res:[

{
    "id":1,
    "name":"www",
    "child":[
        {
            "id":2,
            "name":"ssss",
            "buyNum":23
        },
        {
            "id":2,
            "name":"ssss",
            "buyNum":23
        },
        {
            "id":2,
            "name":"ssss",
            "buyNum":23
        },
        {
            "id":2,
            "name":"ssss",
            "buyNum":23
        }
    ]
}

]

現(xiàn)在的問(wèn)題是我一改變其中一個(gè)一個(gè)對(duì)象中的chile的某個(gè)值,就會(huì)導(dǎo)致其他對(duì)象的child發(fā)生改變。比如我通過(guò)`res[0].child[0].buyNum = 3`,會(huì)導(dǎo)致res[0].child[1]、res[0].child[2]...中的buyNum的值都變成3。
回答
編輯回答
咕嚕嚕

很明顯, 你寫(xiě)的并非深拷貝
luckness 說(shuō)的Object.assign也只是解決了更深一層的引用, 如果你child里某個(gè)元素還有引用類(lèi)型的屬性, 這種情況依然會(huì)出現(xiàn)。

你這種的可以用JSON.parse(JSON.stringify(res))來(lái)實(shí)現(xiàn)

需要注意的是, 遇到值是類(lèi)似function/RegExp這樣的, 或是有循環(huán)引用的就不行了

2018年5月17日 18:51
編輯回答
網(wǎng)妓
_createProps: function (props){
  let colProp = [], rowProp = [], propsAry = [], temp = [];

  if (props[0]){
    props[0].childsCurGoods.forEach(function(n,i){
      colProp.push({id:n.id,name:n.name,buyNum:0});
    });
    propsAry = colProp;
    if (props[1]){
      props[1].childsCurGoods.forEach(function (n, i) {
             
        temp[i] = [];
        for (let j = 0; j < colProp.length;j++){
          temp[i].push(colProp[j]); // colProp[j]是一個(gè)對(duì)象,push進(jìn)去的是一個(gè)引用
        }
        rowProp.push({ id: n.id, name: n.name, child: temp[i]})
      });

      propsAry = rowProp;
    }
  }
  return propsAry;
}

使用Object.assign拷貝一下:

_createProps: function (props){
  let colProp = [], rowProp = [], propsAry = []; // 刪除temp

  if (props[0]){
    props[0].childsCurGoods.forEach(function(n,i){
      colProp.push({id:n.id,name:n.name,buyNum:0});
    });
    propsAry = colProp;
    if (props[1]){
      props[1].childsCurGoods.forEach(function (n, i) {
             
        let temp = [];
        for (let j = 0; j < colProp.length;j++){
          temp.push(Object.assign({}, colProp[j]}); // 使用Object.assign拷貝一下
        }
        rowProp.push({ id: n.id, name: n.name, child: temp})
      });

      propsAry = rowProp;
    }
  }
  return propsAry;
}
2018年3月30日 13:11