【问题标题】:How to copy json array and not change the original array value [duplicate]如何复制json数组而不改变原始数组值[重复]
【发布时间】:2018-01-31 03:41:11
【问题描述】:

如何在不更改原始数组值的情况下复制数组?

var arr1 = [];
var arr2 = [];

arr1 = [{price: 10},{price: 20}];

console.log(arr1);

arr2[0] = arr1[0];
arr2[0].price += 5;

console.log(arr2);

//output arr1 = [{price: 15},{price: 20}]; Why???
//output arr2 = [{price: 15}];

【问题讨论】:

    标签: javascript arrays json


    【解决方案1】:

    使用JSON.parse(JSON.stringify(arr1))深度复制数组

    var arr1 = [];
    
    arr1 = [{
      price: 10
    }, {
      price: 20
    }];
    var arr2 = JSON.parse(JSON.stringify(arr1))
    arr2[0].price += 5;
    console.log(arr2, arr1);

    【讨论】:

      【解决方案2】:

      我的朋友,您正在处理对象指针,本质上您所做的是给 arr1[0] 一个名为 arr2[0] 的别名。当您更改 1 时,您会同时更改两者。解决此问题的一种方法是声明:

      arr2=arr1
      arr2.length=1;
      arr2[0].price+=5;
      

      通过不直接引用对象,而只是复制数组,我们不允许对象在内存中创建指针,而 arr2.length 是为了摆脱第二个元素。

      【讨论】:

        【解决方案3】:

        您正在通过以下操作更改 arr1[0] 的值:

        arr2[0].price+= 5; // eventually arr2[0] = arr1[0] and that's why it is getting updated due to object pointers
        

        【讨论】:

          【解决方案4】:

          您没有使用 arr1 的内容创建新变量。您只是将 arr1 指针复制到一个名为 arr2 的新变量。因此,由于 arr1 和 arr2 指向的对象是相同的,所以修改一个就修改另一个。

          解决方案是创建数组的副本,例如: arr2 = arr1.copy()

          【讨论】:

          • 没有copy方法
          猜你喜欢
          • 2021-12-28
          • 2020-05-22
          • 2020-03-12
          • 2021-01-18
          • 2013-02-08
          • 2021-06-09
          相关资源
          最近更新 更多