问答

关于数组复制

作者:admin 2021-05-08 我要评论

[ [{GOOD_NO: 1},{GOOD_NO: 1},{GOOD_NO: 1}], [{GOOD_NO: 2},{GOOD_NO: 2}], [], [{GOOD_NO: 4}]] 想要复制数组中第二条数据,并添加到尾部,并且修改新添加的...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
[
    [{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([])
        }
    })

}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 关于数组复制

    关于数组复制

  • 更新集合中某条记录的数组中的某一项?

    更新集合中某条记录的数组中的某一项?

  • android 原生 app 开发能通过浏览器调

    android 原生 app 开发能通过浏览器调

  • ant-design-vue pro 导航菜单怎么加ico

    ant-design-vue pro 导航菜单怎么加ico

腾讯云代理商
海外云服务器