关于数组复制

[
    [{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}],
]

可是只要遍历修改新添加的数据,被复制的那条数据也会跟着变,求代码求指点!

阅读 1.3k
2 个回答

复制的时候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([])
        }
    })

}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题