2015-12-02 140 views
1

我有一個陣列,裏面有玩家。每個球員都有它的名字(array[i].name)和權力(array[i].power)。現在我想爲每個玩家動態添加分數。每個年級都應該有自己的分數,取得分數。Javascript:向數組動態添加數據

數據結構例子:

array[i].football.shooting=5; 

array[i].football.dribbling=3; 

我試圖第一推級的名稱給每個玩家,然後添加的類別作爲額外陣列。但沒有.push()工作,因爲我提到:

for (var i = 0; i < array.length; i++) { 
     array[i].push(gradeName); 
} 

可以請別人給我一個提示如何解決這個問題?

非常感謝!

+0

所以'array'包含球員的對象? – Ramanlfc

+0

試試這個:'array [i] .grade = gradeName;' – Rayon

+0

試試'array [i] [「grade」] = gradeName。將數值附加到數組。 – Rajesh

回答

0

這是一個associative array不是你的規則排列

嘗試

for (var i = 0; i < array.length; i++) { 
     array[i][ gradeName ] = {}; 
} 
1

大概是這樣的:

JSFiddle

var array = [{ 
    name: 'hello', 
    power: 1 
}, { 
    name: 'world', 
    power: 3 
}]; 

var getGrades = function() { 
    return { 
     shooting: 5, 
     dribling: 3 
    }; 
} 

for (var i = 0; i < array.length; i++) { 
    array[i].football = []; 
    array[i].football.push(getGrades()); 
} 

console.log(array); 

還應該發佈所需輸出得到一個具體的答案。

+0

謝謝!但我怎樣才能動態地將「射門」和「盤帶」這些類別的名稱設置爲動態輸入?正如我理解這個解決方案,我必須有靜態類別,不是嗎? – bastifix

+0

我不知道你在哪裏得到這些數據,我只是簡單地把一個靜態對象作爲例子。你可以做一個函數來獲取gradeName。 –

+0

如果我獲得gradeName和兩個類別(射擊和戰鬥)到功能。我如何做到這一點不硬編碼的類別名稱,但從功能? – bastifix

1

在JavaScript我建議用數組內的對象 - 我知道這是你已經在做什麼,但看這樣的一個架構:

var players = [ 
    { 
     name: "Playername1", 
     attributes: [ 
     {name: "football", skill_level: { dribbling: 1, passes: 3}}, 
     {name: "basketball", skill_level: {range_shot: 3, passes:1}} 
     ] 
    } 
] 

有了這個架構,你可以把一個全新的播放器對象到陣列。您還可以遍歷屬性,檢查現有屬性,添加缺少的屬性並編輯當前屬性 - >種類繁多。

,如果你想將屬性添加到架構它會像:

var newSkill = { name: "flying plane", skill_level: { flight: 4, landing:0 }}; 

for(var i = 0; i < players.length; i++){ 
    players[i].attributes.push(newSkill); 
} 

希望能幫助一點。

UPDATE

比方說,你已經通過形式接收用戶輸入並保存到一個變量userInputName

然後你就可以simlpy添加動態命名的屬性,這樣的:

變種newSkill = {name:userInputName,skill_level:{flight:4,landing:0}};

for(var i = 0; i < players.length; i++){ 
    players[i].attributes.push(newSkill); 
} 
+0

謝謝!但是我怎樣才能動態地將類別'flight'和'landing'的名稱設置爲動態輸入? – bastifix

+0

如果您以後要更改屬性名稱,則必須更改屬性內容 - 讓我爲您提供我的答案。 **回答編輯** –

+0

好的,但我可以傳遞一個變量作爲類別名稱?類別的飛行和着陸是硬編碼的。例如,如何在某些用戶輸入後命名類別? – bastifix

0

根據您的數據結構,例如添加應該是這樣的:

var grade = 'footbal'; 
var category = 'shooting'; 
var points = 5; 
array[i][grade] = array[i][grade] || {}; 
array[i][grade][category] = points;