这是我的代码:
let testp = {
value: ''
}
let data = [];
for (let i = 0; i < 5; i++) {
testp.value = i;
data.push(testp);
}
console.log(data)
数据返回:
[ { value: 4 },
{ value: 4 },
{ value: 4 },
{ value: 4 },
{ value: 4 } ]
为什么呢?我认为结果是这样的:
[ { value: 0 },
{ value: 1 },
{ value: 2 },
{ value: 3 },
{ value: 4 } ]
答案 0 :(得分:2)
您将对象testp
的引用推送到数组中5次,每次都编辑value
的值。
这是另一个例子:
let foo = { 'a': 1 };
let bar = [foo, foo, foo];
foo.a = 2;
console.log(foo[2]);
// 2
数组bar
包含三个引用到foo
。更改对象的内容将更改对象的所有内容。
如果你想要新对象,你必须在某处创建它们。例如:
// Function that constructs the new objects
let foo = (value) => { return { "value": value } };
let data = [];
for (let i = 0; i < 5; i++) {
data.push(foo(i));
}
答案 1 :(得分:1)
在循环中分配testp.value会导致问题。相反,你可以做到
let testp = {
value: ''
}
let data = [];
for (let i = 0; i < 5; i++) {
data.push({
value: i
});
}
console.log(data)