javascript - 使用键值对替换数组中的元素
问题描述
我有一份以缩写形式列出的州及其邻国的清单。迭代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"]
解决方案
您可以使用find()
该缩写来获取数组中对应的元素。给定一个缩写ab
,这将返回状态对象:
states.find(s => s.abbr == ab)
您可以使用它forEach
来map()
替换每个项目中的邻居(我已经删除了不在列表中的状态的缩写):
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)
理想情况下,您会为此使用对象而不是数组,这样您就可以访问任何状态,而不必每次都遍历数组。
推荐阅读
- javascript - 如何更好地在记录器中添加 uuid
- javascript - 通过钩子 ReactJs 从 API SVG 动态加载
- reactjs - 在 reactjs 中使用外部 java 脚本
- sql - 仅基于时间的 SQL 时间戳过滤
- reactjs - 如何在 api 调用时使用 react-leaflet 添加多个标记?
- android - Android Room Database:数据库属性的线程安全使用
- rust - 将特征实现从 &T 推广到 AsRef 的生命周期
- python - 如何将一个函数用于 2 个数组?
- angular - 使用 @azure/storage-blob 运行 Angular 应用程序时出错
- python - __init__() 在 django 中出现意外的关键字参数“状态”错误