-1

我正在尝试加载一个对象数组,它本身就是一个数组,可以这么说。所以我有一组名称(成员),然后我正在制作一个主列表,其中每个名称的一行都会包含名称、错误、增强等。所以我运行了一个简单的 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

4 回答 4

6

要创建具有预定义大小的数组,请使用以下命令:

masterList = new Array(memlen);

masterList = [memlen]您只是创建了一个数组,其第一项是memlen。这不是问题,因为数组在循环中自动增长,但这不是您的意图)

之后,您需要创建每个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.

于 2012-10-03T18:47:16.070 回答
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
    };
}
于 2012-10-03T18:51:47.950 回答
0

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

于 2012-10-03T18:49:59.970 回答
0

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

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
    };
 });
于 2012-10-03T18:51:01.877 回答