我有商店的列表,其中有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 通过在 store 上分组来提取数据,在 AuthorizationOrder
上订购后获得第一个值.
此外,获取带有关联商店的仓库。请参阅使用 LINQ 实现的 fiddle
fiddle :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))
关于javascript - LINQ Group by & Select FirstOrDefault() 的 Lodash 或 JavaScript 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56006871/