如何复制json数组而不更改原始数组值

时间:2018-01-31 03:41:12

标签: javascript arrays json

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

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}];

4 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

使用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);