【问题标题】:Push object in Javascript在 Javascript 中推送对象
【发布时间】:2017-07-22 16:37:40
【问题描述】:
我需要在 Javascript 中将对象推送到数组,但每次推送都会覆盖我已经添加的同一个对象。例如:
//This is object list
var NewIssue = {};
//This is array
var newIssueList = [];
function myFunction() {
for (var i = 0; i < 3; i++) {
NewIssue.Id = i;
NewIssue.Number = 233 + i;
NewIssue.Name = "Test" + i.toString();
newIssueList.push(NewIssue);
}
}
最后,我将拥有带有 3 个相同对象的 newIssueList。为什么它会覆盖第一个以及如何解决这个问题?
【问题讨论】:
标签:
javascript
arrays
push
【解决方案1】:
您必须在循环内移动对象。
var newIssueList = [];
function myFunction() {
for (var i = 0; i < 3; i++) {
var NewIssue = {};
NewIssue.Id = i;
NewIssue.Number = 233 + i;
NewIssue.Name = "Test" + i.toString();
newIssueList.push(NewIssue);
}
}
myFunction();
console.log(newIssueList);
然后你可以扩展对象字面量 a 以使其更具可读性:
for (var i = 0; i < 3; i++) {
var NewIssue = {
Id:i,
Number:233+i,
Name:"Test"+i
};
newIssueList.push(NewIssue);
}
【解决方案2】:
您还可以通过创建内联对象来避免使用多余的 var:
newIssueList.push({
Id: i,
Number: 233 + i,
Name: "Test" + i.toString()
});
【解决方案3】:
只有一个对象,每次将其推送到数组中时,都会推送对现有对象的引用。当您更改对象时,数组中的每个元素都会反映这一点,因为它们都指向同一个对象。
您需要在每次迭代时创建一个新对象。
//This is array
var newIssueList = [];
function myFunction() {
for (var i = 0; i < 3; i++) {
newIssueList.push({
id: i,
number: 233 + i,
name: "Test" + i.toString()
});
}
}
myFunction();
console.log(newIssueList);