迭代地添加到Javascript中的对象数组

时间:2011-08-12 06:44:16

标签: javascript arrays object

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

    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的最终值,而不是我所期望的,这是不同的值作为计数器我迭代。我很感激你对我做错了什么的指导。提前谢谢!

4 个答案:

答案 0 :(得分:4)

要添加Mimisbrunnr所说的话,你甚至可以这样做:

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

不需要中间变量。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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/

答案 3 :(得分:0)

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