【问题标题】: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()