You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何从嵌套数组的对象数组中提取PASS对应目标值

问题分析

你代码里存在以下几处明显错误:

  • 初始化类型错误:你声明sorted_obj = {}是普通对象,只有数组才有push()方法,需要初始化为空数组才能用push添加元素
  • 方法使用不当:map的核心作用是生成并返回新数组,你这里只是遍历做数据收集,没有用到map的返回值,属于方法滥用,这种场景优先用forEach或者直接用数组转换方法
  • 对象构造语法错误:
    1. 你写的{item.name:registry.name.value}不符合对象键名规则,如果要把变量作为对象键需要用方括号包裹,但你的需求里键名是固定的name和value,不需要动态键
    2. 取值逻辑错误,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:54:02