JavaScript如何筛选与数组全部字符串匹配的对应国家对象
错误原因
- 方法选择错误:
Array.find()仅返回第一个匹配的元素,无法筛选出全部符合条件的对象,需要替换为支持返回所有匹配结果的Array.filter()。 - 匹配逻辑错误:不应该直接将数组
flatArr和v.country做等值判断,你需要匹配的是国家编码code字段,正确逻辑是判断当前项的code是否存在于flatArr中。 - 缺少字段提取步骤:筛选得到匹配的对象数组后,需要通过
Array.map()提取每个对象的country属性,才能得到最终的国家名称数组。
正确代码
const flatArr = ["USA", "FRA", "GBR"] const result = COUNTRY_CODES .filter(item => flatArr.includes(item.code)) .map(item => item.country)
上述代码运行后得到的result就是你期望的["United States of America", "France"],因为你给出的示例COUNTRY_CODES中没有GBR对应的国家项,所以不会出现在结果里。
可选优化(大数据量场景)
如果COUNTRY_CODES条目很多,可以先把flatArr转为Set降低查找的时间复杂度:
const flatArr = ["USA", "FRA", "GBR"] const codeSet = new Set(flatArr) const result = COUNTRY_CODES .filter(item => codeSet.has(item.code)) .map(item => item.country)
内容的提问来源于stack exchange,提问作者user992731
相关产品推荐
相关产品推荐

