[
[{GOOD_NO: 1},{GOOD_NO: 1},{GOOD_NO: 1}],
[{GOOD_NO: 2},{GOOD_NO: 2}],
[],
[{GOOD_NO: 4}]
]
想要复制数组中第二条数据,并添加到尾部,并且修改新添加的数据中的GOOD_NO为5,即:
[
[{GOOD_NO: 1},{GOOD_NO: 1},{GOOD_NO: 1}],
[{GOOD_NO: 2},{GOOD_NO: 2}],
[],
[{GOOD_NO: 4}],
[{GOOD_NO: 5},{GOOD_NO: 5}],
]
可是只要遍历修改新添加的数据,被复制的那条数据也会跟着变,求代码求指点!
###复制的时候JSON.parse(JSON.stringify())
一下,被复制的数据就不会变了
这是浅拷贝和深拷贝的知识点。
浅拷贝就是类似你这样的,源数据改变,目标数据也跟着改变。
深拷贝有几种方法:
(1)for循环实现数组的深拷贝或forEach循环
(2)concat 方法实现数组的深拷贝
(3)ES6扩展运算符实现数组的深拷贝。
(4)JSON.parse(JSON.stringify(arr)
楼主的数组是三维数组。比较复杂,需要多种方法配合。
假设
let arr =[
[{GOOD_NO: 1},{GOOD_NO: 1},{GOOD_NO: 1}],
[{GOOD_NO: 2},{GOOD_NO: 2}],
[],
[{GOOD_NO: 4}]
];
let newArr = [];
if(arr.length > 0) {
arr.forEach(item => {
if(Array.isArray(item) && item !== []) {
let midArr = [].concat(JSON.parse(JSON.stringify(item)));
newArr.push(midArr)
} eles {
newArr.push([])
}
})
}