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

JavaScript嵌套对象数组:根据类型ID获取类别与类型组合字符串

解决方案:简化获取根类别+类型名称的实现

我来帮你搞定这个问题,同时把复杂的实现简化!核心思路是先做一次数据预处理,把类型ID和对应的根类别、类型名称直接关联起来,后续查询一步到位,既高效又好维护。

步骤1:预处理生成类型ID映射表

先遍历你的对象数组,把每个类型ID对应的根类别和类型名称存到一个映射对象里,后续查询直接用ID取值就行:

let obj = [
  { 
    "category": "Residential", 
    "category_id": 1, 
    "types": [
      {"name": "House", "id": 1},
      {"name": "Townhouse / Villa", "id": 3},
      {"name": "House and Land", "id": 5},
      {"name": "Duplex", "id": 4},
      {"name": "Land", "id": 6},
      {"name": "Terrace", "id": 7} // 假设这个Terrace的ID是7
    ]
  },
  {
    "category": "Rural",
    "category_id": 2,
    "types": [
      {"name": "Terrace", "id": 8} // 你期望的Rural下的Terrace,假设ID是8
    ]
  }
];

// 预处理生成映射表,把类型ID和对应的根类别、类型名绑定
const typeMap = {};
obj.forEach(categoryItem => {
  categoryItem.types.forEach(type => {
    typeMap[type.id] = {
      rootCategory: categoryItem.category,
      typeName: type.name
    };
  });
});

步骤2:编写简洁的查询函数

有了映射表之后,查询逻辑就超级简单了,直接根据ID取对应数据然后拼接成需要的格式:

function getCombinedName(typeId) {
  const match = typeMap[typeId];
  // 如果找不到对应ID,可以返回空字符串或者自定义提示
  return match ? `${match.rootCategory} / ${match.typeName}` : '未找到对应的类型';
}

测试示例

比如查询你期望的Rural下的Terrace:

console.log(getCombinedName(8)); // 输出:Rural / Terrace

查询Residential下的Terrace:

console.log(getCombinedName(7)); // 输出:Residential / Terrace

这个方案的优势

  • 高效:只需要预处理一次数组,后续每次查询都是O(1)的时间复杂度,数据量大的时候优势特别明显
  • 简洁:逻辑清晰,代码量少,比反复遍历数组找数据的写法好维护太多
  • 可复用:映射表可以全局复用,不用每次查询都重新遍历整个数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:33:35