在 Javascript 中推送对象

Push object in Javascript

我需要将对象推送到 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。为什么它会覆盖第一个以及如何解决这个问题?

您必须在循环内移动对象。

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);
    }

您还可以通过创建内联对象来避免使用多余的变量:

newIssueList.push({
    Id: i,
    Number: 233 + i,
    Name: "Test" + i.toString()
});

只有一个对象,每次将其推入数组时,都会推入对现有对象的引用。当您更改对象时,数组中的每个元素都会反映这一点,因为它们都指向同一个对象。

您需要在每次迭代时创建一个新对象。

//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);