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

能否用Lodash按两个属性对对象数组进行分组?

用Lodash按多属性分组对象数组的实现方法

当然可以!Lodash的_.groupBy方法完全支持按多个属性对对象数组进行分组,核心思路就是把你要用来分组的多个属性组合成一个唯一的标识键,让拥有相同属性组合的对象自动归为同一组。

针对你给出的示例数组,我假设你想要按日期的年份和月份来分组(这是这类场景中最常见的需求),下面是具体的实现代码:

const _ = require('lodash');

// 你的示例数据
const transactions = [
  { id: 1, amount: 2000, date: "2018-01-31T00:00:00.000Z" },
  { id: 2, amount: 3000, date: "2017-07-31T00:00:00.000Z" },
  { id: 3, amount: 6000, date: "2018-01-31T00:00:00.000Z" },
  { id: 4, amount: 7000, date: "2017-01-31T00:00:00.000Z" },
  { id: 5, amount: 5000, date: "2017-03-31T00:00:00.000Z" },
  { id: 6, amount: 3000, date: "2018-02-22T00:00:00.000Z" },
  { id: 7, amount: 4500, date: "2017-01-31T00:00:00.000Z" }
];

// 按「年份-月份」分组
const groupedByYearMonth = _.groupBy(transactions, item => {
  const transactionDate = new Date(item.date);
  // 把年份和月份拼接成唯一键,月份补零保证格式统一
  return `${transactionDate.getFullYear()}-${String(transactionDate.getMonth() + 1).padStart(2, '0')}`;
});

console.log(groupedByYearMonth);

执行这段代码后,你会得到一个以YYYY-MM为键的对象,每个键对应的值就是该年月下的所有交易对象。

通用的多属性分组方法

如果你的需求是按两个完全独立的属性(比如假设数组里有category和status这类字段),方法也是类似的:

  • 简单场景:用分隔符拼接两个属性值作为键
// 按category和status两个属性分组
const groupedByTwoProps = _.groupBy(yourData, item => `${item.category}-${item.status}`);
  • 严谨场景:如果属性值可能包含分隔符(比如-),可以用JSON.stringify序列化属性组合对象,避免键冲突
const groupedByTwoProps = _.groupBy(yourData, item => JSON.stringify({
  category: item.category,
  status: item.status
}));

总的来说,只要你能为每个对象生成一个唯一代表目标属性组合的键,就能用_.groupBy轻松实现多属性分组,非常灵活好用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:17:38