如何使用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
相关产品推荐
相关产品推荐

