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

问题描述 投票:0回答:3
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 } ]
javascript arrays push
3个回答
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
投票

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

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


1
投票

如果你的ff总是一层深,你可以使用Object.assign克隆ff每次你把它放入数组。

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);
© www.soinside.com 2019 - 2024. All rights reserved.