JavaScript数组分配问题
我刚刚创建了两个数组,并为其中一个数组分配了一个插入的键值对。然后我将一个数组分配或复制到另一个数组。之后,我将另一个键值对添加到第二个数组中,但它也会反映到原始数组中。比如说JavaScript数组分配问题,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我刚刚创建了两个数组,并为其中一个数组分配了一个插入的键值对。然后我将一个数组分配或复制到另一个数组。之后,我将另一个键值对添加到第二个数组中,但它也会反映到原始数组中。比如说 var array1 =[]; var array2 =[]; array1.value1 ='1'; array2 = array1; array2.value2 ='2'; console.log(array1); // it prints {value1:1, value2:2} 为什么在我为array2添加键值
var array1 =[];
var array2 =[];
array1.value1 ='1';
array2 = array1;
array2.value2 ='2';
console.log(array1); // it prints {value1:1, value2:2}
为什么在我为array2添加键值对时更改array1对象?当您执行类似于
array2=array1
您只是将array2
设置为对array1
的引用。要复制array1,需要执行array2=array1.slice()代码>
此外,不能使用array1.value1='1'设置元素代码>。您在那里所做的是将数组转换为。所以你真正应该做的是:
var array1 = [];
var array2 = [];
array1[0] = 1;
array2 = array1.slice();
array2[1] = 2;
通过执行array2=array1代码>将array1对象指定给array2变量。因此,修改array2将修改关联的对象,即array1,因为您通过引用将array1
传递到array2
。您需要进行如下复制:
array2 = new Array(array1);
array2=新阵列(array1);
很明显你不是在复制。而且你没有正确地使用数组。重复了以前许多人提出的问题。我会去找其中一个DUP。@jfriend00:虽然参考问题的答案也回答了这个问题,但我不认为这个问题是那个问题的重复。我并不怀疑这可能是某个东西的副本。这里有一个处理对象赋值复制的期望:@squint-并且您的引用实际上被标记为这个的dup:。有很多很多可供选择。这实际上不起作用。它创建了一个数组,数组中的项目是array1。我不知道。不过,我反驳道::-)@斯科特萨耶:我也是。现在有两个人投了赞成票。