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

JavaScript 实现按对象内tags字符串数组对对象数组分组

实现方案

核心逻辑是遍历所有书籍条目,再遍历每条书籍的标签列表,将不含tags字段的书籍信息归入对应标签的分组中,分组不存在时先初始化空数组即可。

原生JS通用实现(无依赖)

const books = [
  {
    name:"abc",
    isbn: 123,
    tags: ["tagA","tagB","tagC"]
  },
  {
    name:"xyz",
    isbn: 456,
    tags: ["tagB","tagC"]
  },
  {
    name:"pqr",
    isbn: 456,
    tags: ["tagB"]
  }
];

function groupByTags(bookList) {
  const groupResult = {};
  for (const book of bookList) {
    // 分离tags字段,剩余属性就是需要存入分组的书籍信息,和预期输出结构匹配
    const { tags, ...bookData } = book;
    for (const tag of tags) {
      // 对应标签分组不存在时先初始化为空数组
      if (!groupResult[tag]) {
        groupResult[tag] = [];
      }
      groupResult[tag].push(bookData);
    }
  }
  return groupResult;
}

const expected = groupByTags(books);

函数式写法(基于reduce)

如果偏好函数式编程风格,可以用Array.reduce实现同样逻辑:

const groupByTags = (bookList) => 
  bookList.reduce((result, book) => {
    const { tags, ...bookData } = book;
    tags.forEach(tag => {
      result[tag] = result[tag] ?? [];
      result[tag].push(bookData);
    });
    return result;
  }, {});

注意事项

  • 上述实现默认和给出的预期输出保持一致,分组内的书籍对象不保留tags字段,如果需要保留原对象全量字段,去掉解构赋值逻辑,直接push完整book对象即可
  • 实现的时间复杂度为O(n*m),n为书籍总数量,m为单本书籍的平均标签数,常规业务数据量下没有性能问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:57:18