我想创建一个动态的对象数组,并检索它们

时间:2012-12-05 05:03:31

标签: javascript

这是我的代码: 我有两个数组[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 />");

2 个答案:

答案 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]
   }) ;  
}

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