• 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}],
]

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

阅读 118
评论
    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([])
              }
          })
      
      }
        撰写回答

        登录后参与交流、获取后续更新提醒

        相似问题
        推荐文章