数组中的多维数组

时间:2016-05-24 11:47:56

标签: javascript arrays multidimensional-array

我有这个对象:

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 :

3 个答案:

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