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 } ]
答案 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);
i
&#13;