如何根据对象数组中的type值获取对应short_name值?
根据type值获取对应short_name的解决方案
首先注意你提供的数组存在语法错误:后两个对象的short_name键值对末尾缺少逗号,修正后的数组如下:
const address = [ { 'short_name': '123', 'type': 'street_number' }, { 'short_name': 'principal', 'type': 'route' }, { 'short_name': 'Washington', 'type': 'city' } ];
核心解决方案(推荐)
使用find方法直接定位匹配对象并提取short_name,这是最简洁高效的方式:
// 获取type为street_number的short_name,找不到时返回空字符串(可自定义默认值) const part_of_address = address.find(item => item.type === 'street_number')?.short_name || '';
find遍历数组时,会返回第一个符合item.type === 'street_number'条件的对象- 可选链操作符
?.避免找不到匹配对象时出现Cannot read property 'short_name' of undefined的报错 || ''用于在无匹配项时设置默认值,可根据需求改成null或其他值
为什么你之前的方法没成功?
如果用了filter,要注意它返回的是匹配元素组成的数组而非单个对象,必须取数组第一个元素再提取值:
// 用filter实现的写法 const part_of_address = address.filter(item => item.type === 'street_number')[0]?.short_name || '';
但filter会遍历整个数组,而find找到第一个匹配项就停止,性能更优。
扩展:获取所有匹配的short_name
如果数组中可能存在多个同type的元素,需要收集所有对应的short_name,可以结合filter和map:
const all_street_numbers = address.filter(item => item.type === 'street_number').map(item => item.short_name); // 结果示例:['123'](如果有多个匹配项则会包含所有值)
内容的提问来源于stack exchange,提问作者MalamutLeMit
相关产品推荐
相关产品推荐

