我是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]
我非常感谢为何会发生这种情况。
答案 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)
您的项目对象将覆盖最后一项。尝试重新初始化您的对象
试试这个
var item = {};
var array = [];
for(var j =1; j<5; j++){
item.test = j;
array.push(item);
item={};
}
console.log(JSON.stringify(array))
&#13;
答案 3 :(得分:1)
试试这个
var array = [];
for(var j =1; j<5; j++){
var item = {};
item.test = j;
array.push(item);
}
&#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]);
}