2012-10-03 38 views
-1

我想加載一個數組本身的對象,可以這麼說。所以我有一個名稱(成員)的數組,然後我做一個主名單,將名稱,錯誤,增強等在一行中的每個名稱。所以我運行一個簡單的for循環來加載主列表,但它告訴我,對於(0)我,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; 
    } 

回答

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 
    }; 
} 
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的另一個變量。

+0

除非你不需要需要反正初始化數組的長度。只需使用'[]' – Ian

0

var x = [7];不創建7個元素的數組。它會創建一個單元素數組,索引0,值爲7.您需要改爲var x = array(7),並將每個元素初始化爲循環內的對象。

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 
    }; 
}); 
+0

'map'在IE8上不起作用:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map –

+0

[兼容性補丁](https: //developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map#Compatibility) –

+0

反對的任何理由?如果你不瞭解代碼,只需詢問它,然後我將解釋它的工作原理。 –