H5W3
当前位置:H5W3 > 问答 > 正文

关于数组复制

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

}

本文地址:H5W3 » 关于数组复制

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址