• 4
  • 新人请关照

关于数组复制

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

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

阅读 117
评论
    2 个回答

    这是浅拷贝和深拷贝的知识点。
    浅拷贝就是类似你这样的,源数据改变,目标数据也跟着改变。
    深拷贝有几种方法:
    (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([])
            }
        })
    
    }
      相似问题
      推荐文章