为了账号安全,请及时绑定邮箱和手机立即绑定

js数组已经实现深拷贝,但是修改其中一个数组的值,其他数组的值会改变?

js数组已经实现深拷贝,但是修改其中一个数组的值,其他数组的值会改变?

郎朗坤 2019-03-20 15:15:36
_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;  }```在小程序某一页面有这么一函数,目的是将一段数据过滤我需要的如下数据格式: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        }    ]}]现在的问题是我一改变其中一个一个对象中的chile的某个值,就会导致其他对象的child发生改变。比如我通过`res[0].child[0].buyNum = 3`,会导致res[0].child[1]、res[0].child[2]...中的buyNum的值都变成3。
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

很明显, 你写的并非深拷贝
luckness 说的Object.assign也只是解决了更深一层的引用, 如果你child里某个元素还有引用类型的属性, 这种情况依然会出现。

你这种的可以用JSON.parse(JSON.stringify(res))来实现

需要注意的是, 遇到值是类似function/RegExp这样的, 或是有循环引用的就不行了


查看完整回答
反对 回复 2019-04-04
  • 2 回答
  • 0 关注
  • 1135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号