Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于两个属性组合的groupBy数组_Javascript_Node.js_Arrays_Lodash - Fatal编程技术网

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,我还将用我的确切数据进行测试,你能在评论或回答中解释一下,对于我和整个堆栈读者来说,连接它们是如何将它们分组的,以备将来参考。我几乎理解它在做什么,但如果你能解释,那将不胜感激。非常感谢。