使用TypeScript

时间:2019-06-05 04:02:22

标签: json list typescript

我在遍历TypeScript中的json时遇到问题。我在使用一个特定的json字段tribe时遇到麻烦。由于某种原因,我无法遍历那个。在调试器中,我期望Orc出现,但是我得到了0。为什么是这样?如何正确遍历我的tribe数据?

// Maps a profession or tribe group name to a bucket of characters
let professionMap = new Map<string, Character[]>()
let tribeMap = new Map<string, Character[]>()

let herolistJson = require('./data/HeroList.json')

for (let hero of herolistJson){

  // Certain characters can have more than one tribe
  // !!!!! The trouble begins here, tribe is 0???
  for (let tribe in hero.tribe){
    let tribeBucket = tribeMap.get(tribe) as Character[]

    // If the hero does not already exist in this tribe bucket, add it
    if(tribeBucket.find(x => x.name == hero.name) === undefined )
    {
      tribeBucket.push(new Character(hero.name, hero.tribe, hero.profession, hero.cost))
    }
  }
}    

我的json文件看起来像这样

[
  { 
    "name": "Axe", 
    "tribe": ["Orc"], 
    "profession": "Warrior",
    "cost": 1
  },
  {
    "name": "Enchantress",
    "tribe": ["Beast"],
    "profession": "Druid",
    "cost": 1
  }
] 

2 个答案:

答案 0 :(得分:1)

in遍历对象的,而不是值。数组的键是其索引。如果改用of,则将使用较新的迭代器协议,并且Array's iterator提供值而不是键。

for (let tribe of /* in */ hero.tribe) {

请注意,此功能不适用于IE 11,但适用于大多数其他浏览器以及与ES2015兼容的许多JS环境。 kangax/compat有部分列表。

答案 1 :(得分:1)

在第二个循环中将“ in”更改为“ of”。