JavaScript如何从嵌套数组的对象数组中提取PASS对应目标值
问题分析
你代码里存在以下几处明显错误:
- 初始化类型错误:你声明
sorted_obj = {}是普通对象,只有数组才有push()方法,需要初始化为空数组才能用push添加元素 - 方法使用不当:
map的核心作用是生成并返回新数组,你这里只是遍历做数据收集,没有用到map的返回值,属于方法滥用,这种场景优先用forEach或者直接用数组转换方法 - 对象构造语法错误:
- 你写的
{item.name:registry.name.value}不符合对象键名规则,如果要把变量作为对象键需要用方括号包裹,但你的需求里键名是固定的name和value,不需要动态键 - 取值逻辑错误,
registry.name.value不存在,registry.name是字符串PASS,没有value属性,你需要的是匹配项的registry.value
- 你写的
- 无提前终止逻辑:每个外层元素的
values数组里只要找到第一个PASS就可以停止遍历,不需要遍历所有元素,用find比map遍历效率更高
正确实现
基础修改版(和你的原思路对齐)
const result = [] data.forEach(item => { // 找到values里第一个name为PASS的条目 const passItem = item.values.find(registry => registry.name === 'PASS') // 存在PASS条目再加入结果数组,避免无匹配项报错 if (passItem) { result.push({ name: item.name, value: passItem.value }) } })
简洁链式版
const result = data.map(item => { const passItem = item.values.find(r => r.name === 'PASS') return passItem ? {name: item.name, value: passItem.value} : null // 过滤掉没有PASS条目的项,如果确定所有元素都有PASS可以去掉这行filter }).filter(Boolean)
内容的提问来源于stack exchange,提问作者Shiny
相关产品推荐
相关产品推荐

