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

_createProps:function(props){
letcolProp=[],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(letj=0;jtemp[i].push(colProp[j]);
}
rowProp.push({id:n.id,name:n.name,child:temp[i]})
});
propsAry=rowProp;
}
}
returnpropsAry;
}```
在小程序某一页面有这么一函数,目的是将一段数据过滤我需要的如下数据格式:
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。
RISEBY
浏览 1720回答 2
2回答

倚天杖

很明显,你写的并非深拷贝luckness说的Object.assign也只是解决了更深一层的引用,如果你child里某个元素还有引用类型的属性,这种情况依然会出现。你这种的可以用JSON.parse(JSON.stringify(res))来实现需要注意的是,遇到值是类似function/RegExp这样的,或是有循环引用的就不行了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript