首页 > 解决方案 > 使用键值对替换数组中的元素

问题描述

我有一份以缩写形式列出的州及其邻国的清单。迭代states.neighbors数组并返回状态的实际名称的有效方法是什么?

状态

[
  {
    "name": "Washington",
    "abbr": "WA",
    "neighbors": ["OR", "ID"]
  },
  {
    "name": "Oregon",
    "abbr": "OR",
    "neighbors": ["CA", "ID", "NV", "WA"]
  },
  {
    "name": "California",
    "abbr": "CA",
    "neighbors": ["OR", "NV", "AZ", "WA"]
  },
  ...
]

前:

"neighbors": ["OR", "ID"]

后:

"neighbors": ["Oregon", "Idaho"]

标签: javascriptjson

解决方案


您可以使用find()该缩写来获取数组中对应的元素。给定一个缩写ab,这将返回状态对象:

states.find(s => s.abbr == ab)

您可以使用它forEachmap()替换每个项目中的邻居(我已经删除了不在列表中的状态的缩写):

let states = [{"name": "Washington","abbr": "WA","neighbors": ["OR"]},{"name": "Oregon","abbr": "OR","neighbors": ["CA", "WA"]},{"name": "California","abbr": "CA","neighbors": ["OR", "WA"]},]

states.forEach(state => {
    state.neighbors = state.neighbors.map(ab => states.find(s => s.abbr == ab).name)
})

console.log(states)

理想情况下,您会为此使用对象而不是数组,这样您就可以访问任何状态,而不必每次都遍历数组。


推荐阅读