如何将多个对象添加到数组中

时间:2016-05-17 10:06:55

标签: javascript arrays object push

为什么a [0] .nil的值是400.我应该怎么做才能将它设置为200.感谢答案

a = new Array();
x = new Object();
str = "nil";

x[str] = 200;

a.push(x);

x[str] = 400;

a.push(x);

alert("1 = "+ a[0].nil);
alert("2 = "+ a[1].nil);

3 个答案:

答案 0 :(得分:3)

因为您正在将对象x的引用推送到数组a,而不是该对象的副本。

修改x[str]的值后,指向更新对象的[0]引用。

因此,在您的代码a[0]中,a[1]x指向同一个对象。如果您希望在特定代码执行时添加x对象的副本,则必须克隆对象x并将克隆推送到数组中。

所以问题How do I correctly clone a JavaScript object?将帮助你克隆js对象。另请参阅文章"JavaScript: Passing by Value or by Reference"以更好地了解javascript中的变量传递。

祝你好运!

答案 1 :(得分:1)

  

为什么a [0] .nil的值为400

因为x仍然指向您尚未更改的旧引用(您只更改了其中的属性值)。

  

如何将其设置为200

之前

x[str] = 400;

添加此行

x = {}; //x = new Object();

答案 2 :(得分:0)

您应clone objectObject.assing

  

Object.assign()方法用于将所有可枚举的自有属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。



a = new Array();
x = new Object();
str = "nil";

x[str] = 200;

a.push(Object.assign({}, x));

x[str] = 400;

a.push(Object.assign({}, x));

document.write("1 = "+ a[0].nil);
document.write("2 = "+ a[1].nil);