使用push方法在数组中插入对象

时间:2017-12-17 09:36:15

标签: javascript arrays push

var dd = [];
const ff = { };
ff.dd = 0;
dd.push(ff);
console.log(dd);
ff.dd = 1;
dd.push(ff);
console.log(dd);

我正在获得输出

[ { dd: 0 } ]
[ { dd: 1 }, { dd: 1 } ]

但我希望输出像

[ { dd: 0 } ]
[ { dd: 0 }, { dd: 1 } ]

3 个答案:

答案 0 :(得分:1)

要获得该输出,您必须创建对象(ff),而不是修改现有对象。

var dd = [];
let ff = { };     // <== `let` instead of `const`
ff.dd = 0;
dd.push(ff);
console.log(dd);
ff = { };         // <== Create a new object
ff.dd = 1;
dd.push(ff);
console.log(dd);

附注:您根本不需要ff

var dd = [];
dd.push({dd: 0});
dd.push({dd: 1});
console.log(dd);

......实际上整个事情可以在一个初始化器中完成:

var dd = [
  {dd: 0},
  {dd: 1}
];
console.log(dd);

答案 1 :(得分:1)

Javascript保留对对象的引用。 在您的代码中,您最初将ff变量设置为0 dd。 然后修改相同dd变量的ff值,并将另一个引用推送到数组中。 这就是为什么你得到一个数组,其中有2个引用同一个ff对象,dd值为1。

如果要实现所写的结果,则需要先创建一个新对象,然后再将其推入数组。

答案 2 :(得分:1)

如果您的ff总是一层深,那么每次将ff放入数组时,都可以使用Object.assign克隆var ffCopy = Object.assign({}, ff);

var dd = [];
const ff = { };
ff.dd = 0;
dd.push(Object.assign({}, ff));
console.log(dd);
ff.dd = 1;
dd.push(Object.assign({}, ff));
console.log(dd);

&#13;
&#13;
i
&#13;
&#13;
&#13;