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

如何通过遍历多对象数组为subjects填充name_id数组

解决方案

核心思路

先通过一次遍历构建「主题code -> 关联书籍id列表」的映射表,再用这个映射表批量更新subjects的name_id字段,避免嵌套循环带来的性能损耗,适配大数据量场景。

代码实现

// 1. 构建code到书籍id的映射表,用Map提升查找效率
const codeToBookIds = new Map();

books.forEach(book => {
  const bookId = book.id;
  book.set_no.forEach(code => {
    // 如果该code已有记录,就追加bookId;没有则初始化数组
    if (codeToBookIds.has(code)) {
      codeToBookIds.get(code).push(bookId);
    } else {
      codeToBookIds.set(code, [bookId]);
    }
  });
});

// 2. 批量更新subjects的name_id字段
subjects.forEach(subject => {
  // 从映射表取对应书籍id列表,没有则设为空数组
  subject.name_id = codeToBookIds.get(subject.code) || [];
});

关键说明

  • 性能优化:原本嵌套循环的时间复杂度是O(书籍总数 × 单本书set_no长度 + 主题总数),用Map后时间复杂度降为O(总set_no元素数量 + 主题总数),在1.5万甚至4.5万条数据下依然高效。
  • 类型匹配:确保set_no中的元素和subject.code类型一致(示例中均为字符串),避免查找失败。
  • 边界处理:如果某个主题的code未出现在任何书籍的set_no中,name_id会被设为空数组,不影响后续下拉筛选逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:01:08