[英]Loop through array inside an object in JavaScript
我有這個數組
var enemy = {
'level1' : {
creature :
{
creature_name : {
'Goblin' : {
info: {
'c_name' : 'Goblin',
'HP' : '20',
'damage' : '3',
'loot' : [
{name: 'a wooden sword' , item: 'weapon' , value: 2},
{name: 'a golden necklace', item: 'amulet' , value: 1},
{name: 'a pair of boots' , item: 'boots' , value: 1},
{name: 'some cloth legs' , item: 'legs' , value: 1},
{name: 'a cloth helmet' , item: 'helm' , value: 1}
]
}
},
'Cow' : {
info: {
'c_name' : 'Cow',
'HP' : '10',
'damage' : '1',
'loot' : [
{name: 'bell' , item: 'weapon' , value: 0},
{name: 'cow hide cloak' , item: 'cape' , value: 1},
{name: 'a wooden sword' , item: 'weapon' , value: 2},
{name: 'a golden necklace' , item: 'amulet' , value: 1},
]
}
},
'Dragon' : {
info: {
'c_name' : 'Dragon',
'HP' : '100',
'damage' : '5',
'loot' : [
{name: 'an almighty dragon sword' , item: 'weapon' , value: 5},
{name: 'a dragon tooth', item: 'amulet' , value: 5},
{name: 'a pair of dragon boots' , item: 'boots' , value: 4},
{name: 'a dragon helmet' , item: 'helm' , value: 4}
]
}
},
}
},
},
我想收到_creature_name_
。 我看到了帶有arrayname.length
foreach
循環,但是當我嘗試執行enemy.length
或enemy.level1.creature.creature_name.length
我變得undefined
。
對象(鍵/值對)沒有固有的.length
屬性。
要將名稱作為數組獲取,可以使用:
var names = Object.keys(enemy.level1.creature.creature_name);
或者只是直接遍歷每個名稱:
for (var name in enemy.level1.creature.creature_name) {
...
}
關於您所追求的實際內容,您可以使用:
$('#enemy_list').html('Enemies: <br/>Level1: <br/>' +
Object.keys(enemy.level1.creature.creature_name).join('<br/>'));
要么:
var content = ['Enemies:', 'Level1:'].concat(Object.keys(enemy.level1.creature.creature_name));
$('#enemy_list').html(content.join('<br/>'));
由於沒有將對象的長度屬性分配給一個解決方案中的屬性數,因此經典地遍歷對象如下:
for(var prop in enemy['level1'].creature.creature_name){
console.log(prop)
}
這將一一打印出名稱
我也在jsfiddle中准備了它: https ://jsfiddle.net/fo8xjr8w/
var creature_name = enemy.level1.creature.creature_name;
for (var prop in creature_name)
{
console.log(prop);
//this would print Goblin, Cow, Dragon
}
如果要遍歷戰利品數組的更多內部細節,則必須再次進行迭代。
$('#enemy_list')[0].innerHTML = 'Enemies: <br />Level 1: <br />';
for(var enemy_names in enemy['level1'].creature.creature_name){
$('#enemy_list')[0].innerHTML += enemy_names + '<br />';
}
您需要在enemy['level1'].creature.creature_name
為該名稱創建一個道具,然后讓每個enemy['level1'].creature.creature_name
名稱將其放置在包含的div中。 祝好運!
順便說一句,在for循環的問題是,你執行的enemies: <br /> level1: <br />
在for loop
藏漢所以它會顯示它的3倍。 通過這種方法,您可以將名稱僅包含一次的div放入div中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.