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)代码>没有复制
方法