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

如何使用Lodash按值数组对对象数组进行分组?

解决数组属性的多分组需求

你当前使用_.groupBy直接按数组类型的job属性分组时,会将整个数组作为分组键,导致拥有多个职业的对象(比如John)只会出现在组合键的分组中。要让这类对象同时出现在每个对应职业的分组里,可以用以下两种方案:

方案一:使用Lodash链式调用

先通过_.flatMap将每个对象按其job数组拆分为多个条目(每个职业对应一个原对象的关联条目),再用_.groupBy按单个职业分组:

const crew = [
  { name: "john", job: ["electrician", "carpenter"] },
  { name: "bill", job: ["electrician"] },
  { name: "mark", job: ["carpenter"] }
];

const groupedCrew = _.groupBy(
  _.flatMap(crew, person => person.job.map(job => ({ ...person, job }))),
  'job'
);

console.log(groupedCrew);

执行后,groupedCrew的electrician分组会包含John和Bill,carpenter分组会包含John和Mark,完全符合需求。

方案二:原生JavaScript实现

如果不想依赖Lodash,可以手动遍历构建分组对象:

const crew = [
  { name: "john", job: ["electrician", "carpenter"] },
  { name: "bill", job: ["electrician"] },
  { name: "mark", job: ["carpenter"] }
];

const groupedCrew = {};

crew.forEach(person => {
  person.job.forEach(job => {
    // 初始化分组数组(如果不存在)
    if (!groupedCrew[job]) {
      groupedCrew[job] = [];
    }
    // 将当前人员推入对应职业分组
    groupedCrew[job].push(person);
  });
});

console.log(groupedCrew);

这个方案逻辑直观,通过两层遍历完成分组,同样能让John同时出现在两个职业分组中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:31:17