我正试图通过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);
您只需将ThisObj
的Name
属性的值重新分配给一个新值。它是一个引用,因此每次添加新项时都需要创建一个新实例。将变量声明移动到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);