2016-05-24 2 views
-1

У меня этот объект:многомерный массив в массиве

var enemy = { 
    'Goblin' : { 
    'HP' : '20', 
    'damage' : '3', 
    'loot' : ['a wooden sword','a golden coin'] 
    }, 
    'row2' : { 
    'key3' : 'input3', 
    'key4' : 'input4' 
    } 
}; 

Теперь я хочу, чтобы дать value к wooden sword, но я не могу показаться, чтобы выяснить, как это сделать.

Я думал, что-то вроде

'loot' : ['a wooden sword ' ['value' : 3] , 'a golden coin' ['value ' : 1] 

и назвать его как enemy.Goblin.loot.value, но затем я получаю unexpected token :

+0

, что должно 'доступ enemy.Goblin.loot.value'? деревянный меч или золотая монета? –

+0

Это случайный. Он перетасовывается –

ответ

1

Используйте массив объектов:

'loot': [{name: 'a wooden sword', value: 3}, {name: 'a golden coin', value: 1}] 

Тогда вы можете получить доступ к его так :

enemy.Goblin.loot[0].value 

Или же, превратить loot в объект:

'loot': {'a wooden sword': 3, 'a golden coin': 1} 

Тогда вы можете получить доступ значение так:

enemy.Goblin.loot["a wooden sword"] 
1

Один из способов я могу думал, как

var enemy = { 
'Goblin' : { 
    'HP' : '20', 
    'damage' : '3', 
    'loot' : {'a wooden sword':3, 'a golden coin':3} 
}, 
'row2' : { 
    'key3' : 'input3', 
    'key4' : 'input4' 
} 
}; 

enemy.Goblin.loot['a wooden sword'] // will give you 3 
0

Если вы должны сделать это динамически, тогда один из способов будет использовать метод объекта, такой как Object.prototype.setNestedValue(), и что, как правило, будет трудно получить t o быть чрезвычайно простой задачей. OK позволяет увидеть ...

Object.prototype.getNestedValue = function(...a) { 
 
    return a.length > 1 ? (this[a[0]] !== void 0 && this[a[0]].getNestedValue(...a.slice(1))) : this[a[0]]; 
 
}; 
 
Object.prototype.setNestedValue = function(...a) { 
 
    return a.length > 2 ? typeof this[a[0]] === "object" && this[a[0]] !== null ? this[a[0]].setNestedValue(...a.slice(1)) 
 
                       : (this[a[0]] = typeof a[1] === "string" ? {} : new Array(a[1]), 
 
                       this[a[0]].setNestedValue(...a.slice(1))) 
 
         : this[a[0]] = a[1]; 
 
}; 
 

 
var enemy = { 
 
    'Goblin' : { 
 
    'HP' : '20', 
 
    'damage' : '3', 
 
    'loot' : ['a wooden sword','a golden coin'] 
 
    }, 
 
    'row2' : { 
 
    'key3' : 'input3', 
 
    'key4' : 'input4' 
 
    } 
 
}; 
 

 
enemy.setNestedValue("Goblin","loot",0,"a wooden sword",1); 
 
enemy.setNestedValue("Goblin","loot",1,"a golden coin",3); 
 
console.log(JSON.stringify(enemy,null,2));

Смежные вопросы