javascript for循环并放入一个新的数组

时间:2017-05-12 01:31:53

标签: javascript

这是我的代码:

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 } ]

2 个答案:

答案 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)