【问题标题】:iteratively adding to an array of objects in Javascript迭代地添加到Javascript中的对象数组
【发布时间】:2011-08-12 06:44:15
【问题描述】:

我正在尝试使用以下结构迭代地创建一个对象:

    var series = {
        data: [{
            name:  'some text',
            y: 0
        },
        {
            name:  'some other text',
            y: 1
        }]
    }

以下是我目前的代码:

var series = {
    data: []    
};

var datatemp = {
    y: '',
    name: ''
};

for (var i=0; i<10; i++) {
    datatemp.y = i;
    datatemp.name = "namelabel"+i;
    series.data.push(datatemp);
}

但是我得到的是数组所有元素中 series.data[i].y 和 series.data[i].name 的最终值,而不是我所期望的,这是与计数器不同的值我迭代。感谢您对我做错的事情的指导。提前致谢!

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    为了补充 Mimisbrunnr 所说的,你甚至可以这样做:

    for (var i=0; i<10; i++) {
        series.data.push({y: i, name: "namelabel"+i});
    }
    

    不需要中间变量。

    【讨论】:

    • +1。这是我开始输入的答案(尽管我有一些额外的换行符)。
    • 谢谢,我怀疑这很简单。我是 JS 新手,每个人都知道 :)
    【解决方案2】:

    您需要为 for 循环的每次迭代创建一个新的 datatemp,否则您每次只是将相同的对象传递到数组中并修改它的值。

    for (var i=0; i<10; i++) {
        var datatemp = {};
        datatemp.y = i;
        datatemp.name = "namelabel"+i;
        series.data.push(datatemp);
    }
    

    【讨论】:

      【解决方案3】:
      var series = {
          data: []    
      };
      
      
      
      for (var i=0; i<10; i++) {
          var datatemp={};
          datatemp.y = i;
          datatemp.name = "namelabel"+i;
          series.data.push(datatemp);
      }
      
      for (var i=0; i<10; i++) {
          console.log(series.data[i].y);
              console.log(series.data[i].name);
      }
      

      http://jsfiddle.net/Vp8EV/

      【讨论】:

        【解决方案4】:

        对象在 javascript 中通过引用传递,在您的示例中,您只有一个由名称 datatemp 引用的对象,每次您为其成员之一分配新值时,旧成员都会被覆盖,所以您有为循环的每次迭代创建一个新对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-29
          • 2019-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-31
          • 1970-01-01
          相关资源
          最近更新 更多