2017-05-08 27 views
0

我對JavaScript和編程一般都很陌生,想通過在一個小項目上工作來磨練自己的能力。這個想法是,我有一個表格,提供有關事件的信息,名稱,日期,時間和小縮略圖圖像的輸入。動態地命名數組中的對象

我想每一個事件是一個數組內的對象,所以我想有這樣的事情:

var concerts = {}; 

for (var i = 1; i < 11; i++) { 
    window["concert"+i] = new Object(); 
} 

和陣列將結束是什麼:

var concerts = [concert1, concert2, concert3] 

等。

我怎樣才能得到這個循環的工作,以便它需要3個參數並在名爲'concert'+ i的數組中創建一個新對象?謝謝閱讀!

+2

採取從那裏3個參數? – doctorlove

回答

3

音樂會必須是一個數組:

var concerts = []; 

for (var i = 0; i < 10; i++) { 
    concerts[i] = { 
    //maybe also giveit a name if you want to: 
    name:"concert"+i 
    }; 
} 

您可以訪問它像這樣:

concerts[0].name="Wacken";//first concert... 

需要注意的是這樣的:

window["concert"+i] = new Object(); 

是非常不好的風格......

0

首先你聲明一個vari對象類型爲concerts。但是你想要一個數組。第一行使你的代碼非常混亂。

你必須先建立一個空數組:

var concerts = []; // alternatively: new Array(); 

你到底想有這樣的結構:

[ 
    { /* object 1 */ }, 
    { /* object 2 */ } 
] 

現在你可以運行一個福爾環和填充陣列:

for (var i = 0; i <= 10; i++) { 
    concerts.push({['concert' + i]: {}}); 
} 

這將返回類似:

[ 
    {'concert0': {}}, 
    {'concert1': {}}, 
    // skipped 
    {'concert10': {}} 
] 

稍後,您可以填充對象。然而這不是一個很好的風格。也許你應該重新考慮一下,如果真的有必要給每個對象比如音樂會一個名字...... 10。

志不爲:

var concerts = [ 
    { 
     'name': 'concert0', 
     'location': 'somewhere' 
    } 
    // continue with other objects 
]; 
+0

@Jonasw感謝您的評論!數組不能是JavaScript對象中的鍵。然而,這個表達式不是一個數組。 '['concert'+ i]'部分返回一個字符串 - ''concert''是字符串,'i'是數字。由於JS中的類型強制,結果是由方括號返回的字符串。否則,您無法在foor循環中動態創建鍵名稱。 – cezar

+0

抱歉,我已經忘記了......:/也許是因爲我認爲動態密鑰通常是個壞主意...... –

+0

我也認爲動態密鑰是一個非常糟糕的主意。這是OP想要的。在JavaScript中,您可以使用點符號或方括號調用對象的值:'var o.name ='Jonas';'或'var o ['name'] ='Jonas';'。方括號中的關鍵字可以通過一些操作生成:var o ['n'+'am'+'e'] ='Jonas';'。在我的回答中,它看起來很奇怪,這就是爲什麼我最終建議去尋求另一種解決方案。 – cezar