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

如何使用JavaScript从JSON对象数组中按ID获取指定对象?

从JSON数组中提取特定对象的JavaScript实现方案

你的需求很明确:从给定的Awards数组里,根据指定的奖项ID(比如Award1)提取对应的完整详情对象,之后能直接通过属性访问(比如obj.recipient)获取值。下面是具体的实现思路和代码:

核心思路

  • 遍历数组中的每个元素:数组里的每一项都是一个仅包含单个键值对的对象,键就是你要搜索的奖项ID,值就是目标详情对象。
  • 匹配目标ID:对每个元素,检查它是否包含目标奖项ID作为自身属性。
  • 返回结果:找到匹配项后直接返回对应的详情对象;如果遍历结束都没找到,返回null或者你需要的默认值。

具体代码实现

方案一:使用for...of循环(直观易懂)

function findAward(awardsArray, awardId) {
  // 遍历数组中的每个奖项条目
  for (const awardEntry of awardsArray) {
    // 检查当前条目是否包含目标奖项ID
    if (Object.hasOwn(awardEntry, awardId)) {
      // 返回对应的奖项详情对象
      return awardEntry[awardId];
    }
  }
  // 未找到时返回null
  return null;
}

方案二:使用数组find()方法(更简洁)

利用数组的find()方法可以一步定位到匹配的数组元素,再提取对应的详情对象:

function findAward(awardsArray, awardId) {
  // 找到第一个包含目标ID的数组元素
  const matchedEntry = awardsArray.find(entry => Object.hasOwn(entry, awardId));
  // 存在则返回详情,否则返回null
  return matchedEntry ? matchedEntry[awardId] : null;
}

使用示例

拿你提供的测试数据来验证:

// 你的原始奖项数据
const awardsData = [
  { "Award1": { "title": "Award1 Title", "recipient": "John Doe", "description": "Blah Blah Blah" } },
  { "Award2": { "title": "Award2 Title", "recipient": "Tom White", "description": "Blah Blah Blah" } },
  { "Award3": { "title": "Award3 Title", "recipient": "Will Biggs", "description": "Blah Blah Blah" } }
];

// 搜索Award1
const targetAward = findAward(awardsData, "Award1");
console.log(targetAward.recipient); // 输出:John Doe

额外说明

  • 用Object.hasOwn()来检查属性是ES2022新增的推荐方法,相比传统的hasOwnProperty(),它能更好地处理原型链上的属性,避免意外问题。
  • 如果你的奖项ID可能存在大小写差异,可以在匹配前统一转成小写/大写(比如awardId.toLowerCase()和Object.keys(entry)[0].toLowerCase()对比),不过根据你的需求,应该是精确匹配,所以这一步可选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:12:37