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

JavaScript:在嵌套对象中查找目标对象并返回双方元素

解决嵌套对象中查找指定元素并返回所属顶层对象的问题

我来帮你搞定这个需求!针对你这种嵌套结构的数据,我们可以通过遍历顶层用户对象,检查每个用户的items属性里是否包含你要找的目标对象(比如books),找到后把所属的顶层用户名和目标对象的内容一起返回就行。

先准备测试数据

首先我们把你给出的示例补全,方便后续演示:

const userData = {
  "Peter": {
    "data": { "id": 104, "budget": 3400 },
    "items": {
      "shoes": { "sales": 72, "intake": 576 },
      "books": { "sales": 14, "intake": 70 }
    }
  },
  "Bradley": {
    "data": { "id": 105, "budget": 2800 },
    "items": {
      "clothes": { "sales": 23, "intake": 345 },
      "books": { "sales": 9, "intake": 45 }
    }
  }
};

方法1:查找所有匹配的结果

如果需要找出所有顶层用户下的目标对象,比如所有用户的books,可以写一个这样的函数:

function findTargetItems(data, targetKey) {
  const results = [];
  
  // 遍历顶层的每个用户,同时拿到用户名和对应的对象
  for (const [userName, userObj] of Object.entries(data)) {
    // 先确保用户有items属性,且items里存在目标键,避免报错
    if (userObj.items && userObj.items[targetKey]) {
      // 把用户名和目标对象内容存入结果数组
      results.push({
        owner: userName,
        [targetKey]: userObj.items[targetKey]
      });
    }
  }
  
  return results;
}

调用这个函数看看效果:

const allBooks = findTargetItems(userData, 'books');
console.log(allBooks);

输出结果会是:

[
  { owner: 'Peter', books: { sales: 14, intake: 70 } },
  { owner: 'Bradley', books: { sales: 9, intake: 45 } }
]

方法2:只查找第一个匹配的结果

如果你只需要第一个找到的目标对象(比如第一个有books的用户),可以修改函数,找到后直接返回:

function findFirstTargetItem(data, targetKey) {
  for (const [userName, userObj] of Object.entries(data)) {
    if (userObj.items && userObj.items[targetKey]) {
      return {
        owner: userName,
        [targetKey]: userObj.items[targetKey]
      };
    }
  }
  // 没找到的话返回null,你也可以改成自定义提示
  return null;
}

调用示例:

const firstBook = findFirstTargetItem(userData, 'books');
console.log(firstBook);

输出结果:

{ owner: 'Peter', books: { sales: 14, intake: 70 } }

代码说明

  • 使用Object.entries(data)可以把顶层对象转换成键值对数组,让我们能同时获取到顶层用户名(键)和对应的用户对象(值)。
  • 加入userObj.items && userObj.items[targetKey]的判断,是为了避免某些用户没有items属性或者没有目标键时出现Cannot read property 'xxx' of undefined的错误。
  • 返回的结果结构清晰,直接包含了所属的顶层用户名和目标对象的所有元素及值,方便你后续使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:25:18