在JavaScript中循环访问对象内部的数组

时间:2016-06-09 07:34:56

标签: javascript jquery arrays object

我有这个数组

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_。我看到foreach循环arrayname.length,但当我尝试enemy.lengthenemy.level1.creature.creature_name.length时,我得到undefined

4 个答案:

答案 0 :(得分:4)

对象(键/值对)没有内在的.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/>'));

答案 1 :(得分:1)

由于对象不具有分配给一个解决方案内的属性数量的长度属性,因此将按照以下方式循环遍历对象:

for(var prop in enemy['level1'].creature.creature_name){
   console.log(prop)
}

这将逐个打印出名称

我也在jsfiddle中准备了它:https://jsfiddle.net/fo8xjr8w/

答案 2 :(得分:1)

var creature_name = enemy.level1.creature.creature_name;

for (var prop in creature_name)
{   
    console.log(prop);
    //this would print Goblin, Cow, Dragon
}

如果你想遍历战利品阵列的更多内部细节,你必须再次进行迭代。

答案 3 :(得分:0)

$('#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中为名称创建道具,然后foreach enemy_name将其放置在包含div中。古德勒克!

顺便说一句,你对for循环的问题是你在enemies: <br /> level1: <br />中执行了for loop,所以它会显示3次。此方法只将名称放在包含文本的div中。