Javascript For循环迭代计数不起作用



我正试图通过for循环将一些对象推入数组。尽管如此,在for循环中,我希望对象的名称是for循环的当前迭代。下面显示的for循环运行两次,因此第一个对象的Name变量应为1,第二个对象的名称应为2。但是,在这种情况下,无论出于何种原因,该数组中的两个对象都返回Name值2。有人知道为什么会发生这种事吗?

var ThisArray = [];
var ThisObj = {};
for (var x = 1; x <= 2; x++) {
ThisObj.Name = x;
ThisArray.push(ThisObj);
}
console.log(ThisArray);

您总是添加相同的对象。在循环内移动对象:

const thisArray = [];
for (let x = 1; x <= 2; x++) {
const thisObj = {};
thisObj.Name = x;
thisArray.push(thisObj);
}
console.log(thisArray);

您总是在数组中推送同一个对象,因此第二次迭代也将编辑之前插入的对象;相反,你应该这样做:

var obj= {};
for(let x= 1; x<= 2; x++){
obj= {};
obj.name = x;
arr.push(obj);
}
console.log(arr);

因此您将在每次迭代时更改obj

PS:更好的版本:

for(let x= 1; x<= 2; x++){
arr.push({name : 2});
}
console.log(arr);

您只需将ThisObjName属性的值重新分配给一个新值。它是一个引用,因此每次添加新项时都需要创建一个新实例。将变量声明移动到for循环中:

var ThisArray= [];
for(var x= 1; x<= 2; x++){
var ThisObj= {};
ThisObj.Name = x;

ThisArray.push(ThisObj);
}
console.log(ThisArray);

您的问题是推两次同一对象。

以下是您想要的:

var ThisArray = [];
for (var x = 1; x <= 2; x++) {
var ThisObj = {};
ThisObj.Name = x;
ThisArray.push(ThisObj);
}
console.log(ThisArray);

最新更新