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