如何在不更改原始数组值的情况下复制数组?
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}];
答案 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);