无法实例化对象数组

时间:2012-10-03 18:46:15

标签: javascript arrays javascript-objects

我正在尝试加载一个数组本身的对象,可以这么说。所以我有一个名字(成员)数组然后我正在制作一个主列表,每个名称在一行中都有名称,错误,增强等。所以我运行一个简单的for循环来加载主列表,但它告诉我对于(0)i,masterList [i] .name无法加载,因为它是未定义的。有没有解决的办法?感谢

 var mem = getMembers();//get a array of members
 var memlen = mem.length;
 var masterList = [memlen]; //set to number of members
 for(i=0; i < memlen; i++){  
    masterList[i].name = mem[i];  //set .name to the members list name at i
    masterList[i].bugs = 0; 
    masterList[i].enhance = 0; 
    masterList[i].epic = 0; 
    masterList[i].dev = 0; 
    masterList[i].high = 0;
  }

4 个答案:

答案 0 :(得分:6)

要使用预定义的大小创建阵列,请使用:

masterList = new Array(memlen);

(使用masterList = [memlen]你只是创建了一个第一项为memlen的数组。这不是问题,因为数组在循环中自动增长,但这不是你的意图)< / p>

之后,您需要创建每个masterList[i]

var masterList = new Array(memlen);
for (var i=0; i < memlen; i++){  
    masterList[i] = {};
    masterList[i].name = mem[i];  //set .name to the members list name at i

如果你不这样做,那就是undefined,因此你有错误。

我还在循环声明中添加了var,以避免意外删除另一个名为i的变量。

答案 1 :(得分:1)

正确的版本是:

var mem = getMembers();//get a array of members
var memlen = mem.length;
var masterList = []; //set to number of members
for(var i=0; i < memlen; i++){  
    masterList[i] = {
        name: mem[i],  //set .name to the members list name at i
        bugs: 0, 
        enhance: 0, 
        epic: 0, 
        dev: 0, 
        high: 0
    };
}

答案 2 :(得分:0)

var x = [7];不会创建7个元素的数组。它创建一个单独的元素数组,索引0,值为7.你需要改为var x = array(7),并在循环中将每个元素初始化为一个对象。

答案 3 :(得分:0)

这没有设定长度。它只是创建一个新的Array,其中一个成员设置为长度。

var masterList = [memlen]; //set to number of members

由于您似乎已经拥有了一个数组,因此您可以使用.map来构建一个新数组。

 var mem = getMembers();
 var masterList = mem.map(function(item) {
    return {
        name: item.name, bugs: 0, enhance: 0, epic: 0, dev: 0, high: 0
    };
 });