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

Javascript 如何复制json数组而不更改原始数组值,javascript,arrays,json,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}]; 我的

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

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

我的朋友,您处理的是对象指针,实际上您所做的是为arr1[0]提供一个名为arr2[0]的别名。当你改变了1,你就改变了两者。解决此问题的一种方法是声明:

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

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

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

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

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

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

使用
JSON.parse(JSON.stringify(arr1))

var arr1=[];
arr1=[{
价格:10
}, {
价格:20
}];
var arr2=JSON.parse(JSON.stringify(arr1))
arr2[0]。价格+=5;

控制台日志(arr2,arr1)没有
复制
方法