2016-05-24 27 views
-1

ich dieses Objekt haben:mehrdimensionales Array in Array

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

Jetzt möchte ich eine value zum wooden sword geben, aber ich kann nicht scheinen, um herauszufinden, wie dies zu tun.

dachte ich so etwas wie

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

und es wie enemy.Goblin.loot.value nennen, aber dann bekomme ich ein unexpected token :

+0

was soll 'enemy.Goblin.loot.value' Zugang? Holzschwert oder goldene Münze? –

+0

Es ist zufällig. Es wird gemischt –

Antwort

1

ein Array von Objekten Verwendung:

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

Dann können Sie es so, dass Zugriff :

enemy.Goblin.loot[0].value 

oder alternativ drehen loot in ein Objekt:

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

Dann können Sie den Wert so Zugang:

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

Ein Weg, ich wie

dachte kann
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

Wenn Sie muss dies dynamisch tun, dann würde man eine Objektmethode wie Object.prototype.setNestedValue() verwenden und was normalerweise schwierig wäre t o eine sehr leichte Aufgabe sein. siehe OK lässt ...

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));