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

JavaScript如何在对象数组中按键查找匹配的目标值

问题说明

给定对象数组与目标raceId:

const raceId = '1004'
const array =  [
  {
    '1004': { brackets: { '18': [Object], '19': [Object], '20': [Object] } }
  },
  {
    '999': { brackets: { '1': [Object], '2': [Object], '3': [Object] } }
  }
] 

需要提取raceId匹配'1004'的对象值,预期输出:

{ brackets: { '18': [Object], '19': [Object], '20': [Object] } }

要求不使用forEach或for循环,用一行代码实现。

原有reduce写法的错误点

你的reduce代码存在两个核心问题:

  • reduce回调要求每次迭代必须返回累加值,你的逻辑仅在匹配到目标key时返回值,未匹配的分支没有返回内容,默认返回undefined,导致后续迭代无法拿到有效累加值,最终结果为undefined
  • 代码中引用的数组名raceScoringConfigGroups和你定义的数组变量名array不一致,如果不是笔误会直接触发引用错误
最优一行实现

直接用find搭配可选链实现,找到匹配项后会立刻终止遍历,性能优于全量遍历的reduce/map方案:

const target = array.find(item => Object.hasOwn(item, raceId))?.[raceId]

补充:如果你的运行环境不支持Object.hasOwn,可以简化判断为item => item[raceId],只要raceId对应的value不会是假值(null/undefined/0/空字符串等)就完全可用。

如果一定要用reduce实现,修正后的写法如下(不推荐,会遍历整个数组,无提前终止逻辑):

const target = array.reduce((res, item) => res ?? (item[raceId] || res), undefined)

内容的提问来源于stack exchange,提问作者Ambulance lada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.17 16:16:01