能否用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
相关产品推荐
相关产品推荐

