我有这个对象:
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 :(得分: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 :(得分: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
答案 2 :(得分:0)
如果你必须动态地执行此操作,那么一种方法是使用像Object.prototype.setNestedValue()
这样的Object方法,而通常难以实现的是一项非常简单的工作。好的,让我们看看......
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));