Node.js控制流程

时间:2016-10-31 12:00:46

标签: javascript

我是nodejs的新手,我在异步中真的很困惑。

我尝试使用示例代码将项目存储到for循环中的数组:

var item = {};
var array = [];
for (var j = 1; j < 5; j++) {
  item.test = j;
  array.push(item);
}

我预计array的结果为:

[{test: 1}, {test: 2}, {test: 3}, {test: 4}]

但我得到了:

[{test: 4}, {test: 4}, {test: 4}, {test: 4}]

如果我只是将j推送到array,那就没事了。

var array = [];
for(var j = 1; j < 5; j++) {
  array.push(j);
}

结果是:

[1, 2, 3, 4]

我非常感谢为何会发生这种情况。

5 个答案:

答案 0 :(得分:1)

在每次迭代中,您将item的同一对象实例推送到数组中。最后是item的引用数组,其中包含上次分配中的test: 5

您需要在每次迭代中创建不同的对象以保留不同的属性:

for (var j = 1; j < 5; j++) {
   array.push({test: j});
}

答案 1 :(得分:1)

你可以通过在循环范围内声明项来解决这个问题,所以每次都是一个新对象。

const array = [];

for(let j = 1; j < 5; j++){
   var item = {test: j};
   array.push(item);
}

答案 2 :(得分:1)

您的项目对象将覆盖最后一项。尝试重新初始化您的对象

试试这个

&#13;
&#13;
  

  var item = {};
  var array = [];
  for(var j =1; j<5; j++){
    item.test = j;
    array.push(item);
    item={};
  }
  console.log(JSON.stringify(array))
&#13;
&#13;
&#13;

答案 3 :(得分:1)

试试这个

&#13;
&#13;
var array = [];
for(var j =1; j<5; j++){
  var item = {};
  item.test = j;
  array.push(item);
}
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您正在尝试在循环时修改同一个对象。请在循环语句中创建对象并将其推送到数组中。

var array = [];

for (var j = 1; j < 5; j++) {
  var item = {};
  item.test = j;
  array.push(item);
}

for (var j = 0; j < array.length; j++) {
  console.log(array[j]);
}