JavaScript array assign issue
我刚刚创建了两个数组,并为其中一个数组分配了一个插入的键值对。然后我分配或复制一个数组到另一个数组。在这之后,我向第二个数组添加了另一个键值对,但它也会反映到原始数组中。例如。
1 2 3 4 5 6
| var array1 =[];
var array2 =[];
array1.value1 ='1';
array2 = array1;
array2.value2 ='2';
console.log(array1); // it prints {value1:1, value2:2} |
为什么它在我为array2添加键值对时更改array1对象?
- 型很明显你没有复制。你没有正确使用数组。
- 型其他许多人以前问过的重复问题。我要去找其中一个傻瓜。
- 型@朋友00:虽然参考问题的答案也回答了这个问题,但我不认为这个问题是那个问题的副本。我并不怀疑这可能是某种东西的复制品。
- 型下面是一个处理对象分配生成副本的期望值:stackoverflow.com/questions/24586423/…
- 型@斜视-你的参考实际上被标记为这个的重复:stackoverflow.com/questions/518000/…。有很多,很多可以选择。
- 型@是的,我知道。我只想提供一个专门尝试通过分配制作副本。没关系。就像你说的,有很多。
通过执行array2 = array1;操作,可以将array1对象分配给array2变量。因此,修改array2将修改关联的对象,即array1
当你做类似于array2 = array1;的事情时,你只是把array2设置为对array1的引用。要复制array1,您需要执行array2 = array1.slice();
此外,不能用array1.value1 ='1';设置数组元素。您所做的是将数组转换为对象。所以你真正应该做的是:
1 2 3 4 5
| var array1 = [];
var array2 = [];
array1[0] = 1;
array2 = array1.slice();
array2[1] = 2; |
因为你通过引用array1传递给array2。你需要做如下的复制:
1
| array2 = new Array(array1); |
- 谁反对这个?
- 这实际上不起作用。它创建一个数组,其中array1作为数组中的项。
- 我不知道。不过,我反驳了。-)
- @斯科特索耶:我也是。现在有两个人投了反对票。