Javascript 基于两个属性组合的groupBy数组
我想根据两个属性的组合对数组元素进行分组 我有一个数组,其中包含Javascript 基于两个属性组合的groupBy数组,javascript,node.js,arrays,lodash,Javascript,Node.js,Arrays,Lodash,我想根据两个属性的组合对数组元素进行分组 我有一个数组,其中包含FirstDate和LastDate,我想用FirstDate和LastDate的相同组合对对象进行分组,并创建具有任意随机唯一字符串的对象,作为任何数组的键或数组 我有以下数组 const data=[ { 投资日期:“2021-05-04 00:00:00”, EntityID:4309, 第一天:“2021-05-03 18:30:00”, 最后日期:“2021-05-04 18:30:00” }, { 投资日期:“20
FirstDate
和LastDate
,我想用FirstDate
和LastDate
的相同组合对对象进行分组,并创建具有任意随机唯一字符串的对象,作为任何数组的键或数组
我有以下数组
const data=[
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4309,
第一天:“2021-05-03 18:30:00”,
最后日期:“2021-05-04 18:30:00”
},
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4314,
第一天:“2021-05-03 18:30:00”,
最后日期:“2021-05-04 18:30:00”
},
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4464,
第一天:“2021-05-01 18:30:00”,
最后日期:“2021-05-04 18:30:00”
},
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4465,
第一天:“2021-04-20 18:30:00”,
最后日期:“2021-05-04 18:30:00”
}
]
我想对具有类似的FirstDate
和LastDate
的对象进行分组,例如,结果应该如下所示
//数组的数组示例
常量result1=[
[
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4309,
第一天:“2021-05-03 18:30:00”,
最后日期:“2021-05-04 18:30:00”
},
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4314,
第一天:“2021-05-03 18:30:00”,
最后日期:“2021-05-04 18:30:00”
},
],
[
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4464,
第一天:“2021-05-01 18:30:00”,
最后日期:“2021-05-04 18:30:00”
},
],
[
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4465,
第一天:“2021-04-20 18:30:00”,
最后日期:“2021-05-04 18:30:00”
}
]
]
或
//GroupedBy对象与任意随机键示例
常量result2={
“1”:[
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4309,
第一天:“2021-05-03 18:30:00”,
最后日期:“2021-05-04 18:30:00”
},
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4314,
第一天:“2021-05-03 18:30:00”,
最后日期:“2021-05-04 18:30:00”
},
],
“第2条”:[
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4464,
第一天:“2021-05-01 18:30:00”,
最后日期:“2021-05-04 18:30:00”
},
],
“第3条”:[
{
投资日期:“2021-05-04 00:00:00”,
EntityID:4465,
第一天:“2021-04-20 18:30:00”,
最后日期:“2021-05-04 18:30:00”
}
]
}
它在node中,不必在VaniallaJS中,使用Lodash函数可以工作,因为我已经在我的应用程序中安装了它。使用Lodash,您可以使用回调(“迭代对象”)创建一个复合键,一次按两个字段分组。在您的示例中,这很容易,因为所有日期都具有相同的格式,因此您可以简单地将它们串联(添加)以创建唯一的复合键。就是
_.groupBy(data, item => item.FirstDate + item.LastDate)
你应该做你想做的
在一般情况下,键可以是任意字符串或其他类型,您可以使用JSON将它们组合成单个字符串键,例如:
_.groupBy(data, item => JSON.stringify([item.firstKey, item.secondKey]))
因为洛达斯可能会进来handy@georg是的,通过使用它,我可以使用单个键进行分组,如
LastDate
,但我不确定如何使用组合键进行分组在这种特殊情况下,您可以简单地将它们连接起来:\uuuu.groupBy(data,x=>x.FirstDate+x.LastDate)
,这确实有效@georg,我还将用我的确切数据进行测试,你能在评论或回答中解释一下,对于我和整个堆栈读者来说,连接它们是如何将它们分组的,以备将来参考。我几乎理解它在做什么,但如果你能解释,那将不胜感激。非常感谢。