我正在尝试使用以下结构迭代地创建一个对象:
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的最终值,而不是我所期望的,这是不同的值作为计数器我迭代。我很感激你对我做错了什么的指导。提前谢谢!
答案 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);
}
答案 3 :(得分:0)
对象在javascript中通过引用传递,在您的示例中,您只有一个名称datatemp
引用的对象,每次为其中一个成员分配新值时,旧成员都会被覆盖,因此你必须为循环的每次迭代创建一个新对象。