【问题标题】: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);

      【讨论】:

        猜你喜欢
        • 2021-07-19
        • 1970-01-01
        • 2016-10-29
        • 1970-01-01
        • 1970-01-01
        • 2015-05-05
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        相关资源
        最近更新 更多