javascript - LINQ Group by & Select FirstOrDefault() 的 Lodash 或 JavaScript 等效项
问题描述
我有商店列表AuthorizationOrder
,我需要firstOrDefault
在 JavaScript 中提取分组集合的值。
eg: storeDto : { StoreNumber = 1 , Warehouse = 4201, AuthorizationOrder = 1 },
{ StoreNumber = 2 , Warehouse = 4201, AuthorizationOrder = 2 },
{ StoreNumber = 1 , Warehouse = 4202, AuthorizationOrder = 2 },
{ StoreNumber = 1 , Warehouse = 4203, AuthorizationOrder = 3 },
{ StoreNumber = 2 , Warehouse = 4207, AuthorizationOrder = 1 }
使用 LINQ:
warehouseStoreList = warehouseStoreList.GroupBy(x => x.StoreNumber)
.Select(g => g.OrderBy(x => x.AuthorizationOrder).FirstOrDefault()).ToList();
Result: { StoreNumber = 1 , Warehouse = 4201, AuthorizationOrder = 1 },
{ StoreNumber = 2 , Warehouse = 4207, AuthorizationOrder = 1 }
我如何使用Lodash
或 JavaScript 进行类似的操作,通过在存储上分组来提取数据,在排序后获取第一个值AuthorizationOrder
。
另外,获取带有关联商店的仓库。请参阅使用 LINQ 实现的小提琴
小提琴:https ://dotnetfiddle.net/glC1ij
想用 JavaScript 或 Lodash 实现同样的目标。
解决方案
您可以使用reduce
基于StoreNumber
. 创建一个具有唯一性的累加器,每个唯一性StoreNumber
作为键,如下所示:
{
"1": {
"StoreNumber": 1,
"Warehouse": 4201,
"AuthorizationOrder": 1
},
"2": {
"StoreNumber": 2,
"Warehouse": 4207,
"AuthorizationOrder": 1
}
}
key
如果不存在或当前AuthorizationOrder
小于累加器的值,则更新该值。然后用于Object.values()
获取数组的值:
const array = [{StoreNumber:1,Warehouse:4201,AuthorizationOrder:1},{StoreNumber:2,Warehouse:4201,AuthorizationOrder:2},{StoreNumber:1,Warehouse:4202,AuthorizationOrder:2},{StoreNumber:1,Warehouse:4203,AuthorizationOrder:3},{StoreNumber:2,Warehouse:4207,AuthorizationOrder:1}]
const grouped = array.reduce((acc, o) => {
let group = acc[o.StoreNumber];
if(!group || group.AuthorizationOrder > o.AuthorizationOrder)
acc[o.StoreNumber] = o;
return acc;
}, {})
console.log(Object.values(grouped))
推荐阅读
- namespaces - 'RxODE' 的包或命名空间加载失败。'RxODE' 的 attachNamespace() 中的 onAttach 失败,
- flutter - Flutter - 当长度大于或小于 0 时启用/禁用按钮
- java - 终端显示找不到文件后怎么办?
- node.js - 运行 `ng update @angular/cli @angular/core` 并且无法为 Angular 项目提供服务后,`ng serve` 出错
- java - 如何在不重新暂存 App 的情况下在 PCF 中重新暂存应用程序实例
- regex - 从 splunk 中的消息字段中删除字符
- macos - 密钥库密码?嗯?
- google-apps-script - 隐藏基于单元格值谷歌脚本的列
- flutter - 使用 Kotlin 语言创建 Flutter 项目的区别。和Java语言。?
- reporting-services - 每个行组的最新日期的 SSRS 图表