这是我的代码: 我有两个数组[lab,val],其值将被动态传递给object。 k是用于保存对象的数组
var lab = ["1","2","3",4];
var val = ["sa","ma","pa","da"];
var k = [];
for(var i=0; i<4; i++) {
data[i] = {};
data[i].label = lab[i];
data[i].value = val[i];
k.push(data[i]) ;
}
document.write(k.data[0]);
document.write(" " + k.data[0] + "<br />");
答案 0 :(得分:2)
您的data
变量似乎未声明。尝试在循环之前声明它,并且,当你在那里时,考虑更改for循环的条件以检查数组的长度,而不是将其硬编码为2。
var lab = ["1","2","3",4];
var val = ["sa","ma","pa","da"];
var k = [],
data = []; // <----- here
for(var i = 0; i < lab.length; i++) {
data[i] = {};
data[i].label = lab[i];
data[i].value = val[i];
k.push(data[i]) ;
}
但实际上,data
数组有什么意义?看起来它只是拥有k
所有内容的副本。为什么不这样做:
var lab = ["1","2","3",4];
var val = ["sa","ma","pa","da"];
var k = [];
for(var i=0; i < lab.length; i++) {
k.push({
label: lab[i],
value: val[i]
});
}
答案 1 :(得分:1)
由于您已经将对象推送到数组中,因此请执行此操作 -
var lab = ["1","2","3",4];
var val = ["sa","ma","pa","da"];
var k = [];
var obj; // it will hold temporary object references
for(var i=0; i<4; i++) {
obj = {};
obj.label = lab[i];
obj.value = val[i];
k.push(obj) ;
}
document.write(k[0].label); // index k, rather than the value it contains
document.write(" " + k[0].value + "<br />");
您的代码无效,因为您正在为k
存储的值建立索引,并且您的data
变量未在任何地方声明。
你甚至可以通过直接将对象推入数组来缩短for
循环,这是一种更好的方法 -
for(var i=0; i<4; i++) {
k.push({
label: lab[i],
value: val[i]
}) ;
}
这样你甚至不需要临时对象。