1

这是我的代码:我有两个数组[lab,val],它们的值将动态传递给对象。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 />");
4

2 回答 2

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]       
   });  
}
于 2012-12-05T05:06:43.563 回答
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]
   }) ;  
}

这样,您甚至不需要临时对象。

于 2012-12-05T05:07:12.270 回答