【发布时间】:2021-07-27 22:58:20
【问题描述】:
我想根据 2 个属性的组合对数组元素进行分组。
我有一个包含FirstDate 和LastDate 的数组,我想用FirstDate 和LastDate 的相同组合对对象进行分组,并使用任何随机唯一字符串作为键或数组数组创建对象,任何都可以.
我有以下数组,
const data = [
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4309,
FirstDate: "2021-05-03 18:30:00",
LastDate: "2021-05-04 18:30:00"
},
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4314,
FirstDate: "2021-05-03 18:30:00",
LastDate: "2021-05-04 18:30:00"
},
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4464,
FirstDate: "2021-05-01 18:30:00",
LastDate: "2021-05-04 18:30:00"
},
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4465,
FirstDate: "2021-04-20 18:30:00",
LastDate: "2021-05-04 18:30:00"
}
]
我想对具有相似FirstDate 和LastDate 的对象进行分组,因此例如结果应该如下所示,
// Array of arrays example
const result1 = [
[
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4309,
FirstDate: "2021-05-03 18:30:00",
LastDate: "2021-05-04 18:30:00"
},
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4314,
FirstDate: "2021-05-03 18:30:00",
LastDate: "2021-05-04 18:30:00"
},
],
[
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4464,
FirstDate: "2021-05-01 18:30:00",
LastDate: "2021-05-04 18:30:00"
},
],
[
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4465,
FirstDate: "2021-04-20 18:30:00",
LastDate: "2021-05-04 18:30:00"
}
]
]
或
// GroupedBy object with any random key example
const result2 = {
"random1": [
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4309,
FirstDate: "2021-05-03 18:30:00",
LastDate: "2021-05-04 18:30:00"
},
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4314,
FirstDate: "2021-05-03 18:30:00",
LastDate: "2021-05-04 18:30:00"
},
],
"random2": [
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4464,
FirstDate: "2021-05-01 18:30:00",
LastDate: "2021-05-04 18:30:00"
},
],
"random3": [
{
InvDate: "2021-05-04 00:00:00",
EntityID: 4465,
FirstDate: "2021-04-20 18:30:00",
LastDate: "2021-05-04 18:30:00"
}
]
}
它在节点中,不必在 VaniallaJS 中,使用 Lodash 功能可以工作,因为我已经在我的应用程序中安装了它。
【问题讨论】:
-
for lodash lodash.com/docs/4.17.15#groupBy 可能会派上用场
-
@georg 是的,通过使用它,我可以使用
LastDate这样的单个键进行分组,但我不确定如何使用组合键进行分组 -
在这种特殊情况下,您可以简单地连接它们:
_.groupBy(data, x => x.FirstDate + x.LastDate) -
这确实有效@georg,我还将用我的确切数据进行测试,您能否在 cmets 或答案中解释,将它们连接起来如何对它们进行分组,以供我和整个堆栈观众将来参考。
-
我几乎明白它在做什么,但如果你能解释一下,那将不胜感激。谢谢
标签: javascript node.js arrays lodash