gpt4 book ai didi

javascript - 使用 Lodash 按多个属性对对象数组进行分组

转载 作者:行者123 更新时间:2023-11-30 14:43:03 26 4
gpt4 key购买 nike

lodash 库可以通过 2 个属性对元素进行分组吗?我有这样的对象数组:

[{
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"
}]

我的目标是按以下方式对数组中的对象进行分组:

  1. 年份

该分组的目的是我需要在结果中按最新顺序排列这些对象的总和。因此,出于这个原因,我需要区分 2017 年 1 月和 2018 年 1 月。它应该是 2 个不同的组。

我不确定我的方法是否正确,所以我在这里写下我需要的输出:

[
3000, // sum of 2018-2
8000, // sum of 2018-1
3000 // sum of 2017-7
5000 // sum of 2017-3
11500 // sum of 2017-1
]

我尝试了以下命令,但它不起作用并给我错误:

  let xxx = _(data)
.groupBy(function(i) {
new Date(i.date).getFullYear()
})
.groupBy(function(i) {
new Date(i.date).getMonth()
})
.map(x => x.amount)
.sum()
.orderBy('date').value();

你能帮我修一下吗?谢谢。

最佳答案

你可以用 groupBy 连接你的年份和月份并使用它。

var grouped = _.groupBy(data, function(i) {
return new Date(i.date).getFullYear()+'-'+new Date(i.date).getMonth()
})

var resultUnsorted = _.map(t, (val, key) => ({key: key, val: val.reduce((p, c) => c.amount + p, 0) }));

然后使用 _.orderBy 排序

const output = _.orderBy(resultUnsorted, 'key');

您可以使用您想要的行为编写自定义排序函数。

关于javascript - 使用 Lodash 按多个属性对对象数组进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49363165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com