Javascript LINQ Group by&;选择FirstOrDefault()
我有列表具有Javascript LINQ Group by&;选择FirstOrDefault(),javascript,typescript,lodash,Javascript,Typescript,Lodash,我有列表具有AuthorizationOrder的存储,我需要在JavaScript中提取分组集合的firstOrDefault值 eg: storeDto : { StoreNumber = 1 , Warehouse = 4201, AuthorizationOrder = 1 }, { StoreNumber = 2 , Warehouse = 4201, AuthorizationOrder = 2 }, { StoreNumb
AuthorizationOrder
的存储,我需要在JavaScript中提取分组集合的firstOrDefault
值
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
小提琴:
想要用JavaScript或Lodash实现同样的效果。您可以根据StoreNumber
进行分组。创建一个累加器,每个唯一的StoreNumber
键如下:
{
"1": {
"StoreNumber": 1,
"Warehouse": 4201,
"AuthorizationOrder": 1
},
"2": {
"StoreNumber": 2,
"Warehouse": 4207,
"AuthorizationOrder": 1
}
}
如果键
不存在或当前的授权顺序
小于累加器的授权顺序,则更新该值。然后使用仅获取数组的值:
const数组=[{StoreNumber:1,仓库:4201,授权订单:1},{StoreNumber:2,仓库:4201,授权订单:2},{StoreNumber:1,仓库:4202,授权订单:2},{StoreNumber:1,仓库:4203,授权订单:3},{StoreNumber:2,仓库:4207,授权订单:1}]
const group=数组。reduce((acc,o)=>{
let group=acc[o.StoreNumber];
如果(!group | | group.AuthorizationOrder>o.AuthorizationOrder)
acc[o.StoreNumber]=o;
返回acc;
}, {})
console.log(Object.values(grouped))
您可以通过以下步骤执行此操作:
- 对对象数组应用
,并将累加器设置为空对象reduce()
{}
- 对象的键为
,值为对象storeNumber
- 检查特定键处已存在对象的
是否大于我们正在迭代的元素的AuthorizationOrder
,然后将该键的值更改为当前元素。否则不要改变它AuthorizationOrder
- 最后使用
获取对象数组Object.values()
const arr=[{StoreNumber:1,Warehouse:4201,AuthorizationOrder:1},
{店号:2,仓库:4201,授权订单:2},
{店号:1,仓库:4202,授权订单:2},
{店号:1,仓库:4203,授权订单:3},
{店号:2,仓库:4207,授权订单:1}]
常数res=arr.reduce((ac,a)=>{
设ao=a.AuthorizationOrder
设ao2=(ac[a.StoreNumber]|{}).AuthorizationOrder | |无穷大
如果(ao console.log(Object.values(res))
使用lodash/fp,您可以按StoreNumber
对项目进行分组,然后将每组映射到具有最小授权顺序的项目
值:
const{flow,groupBy,map,minBy}=_
常数fn=流量(
groupBy('StoreNumber'),
地图(minBy('AuthorizationOrder'))
)
常量数组=[{StoreNumber:1,仓库:4201,授权订单:1},{StoreNumber:2,仓库:4201,授权订单:2},{StoreNumber:1,仓库:4202,授权订单:2},{StoreNumber:1,仓库:4203,授权订单:3},{StoreNumber:2,仓库:4207,授权订单:1}]
常量结果=fn(数组)
console.log(结果)
如果storelist在javascript中为空,请回答如何将存储绑定到仓库并移除仓库,附件是JSFIDLE,我正在寻找javascript等价物code@VijenderReddyChintalapudi这是一个完全不同的问题。如果storelist在javascript中为空,请回答如何将存储绑定到仓库并移除仓库,附件是使用LINQ的JSFIDLE,我正在寻找javascript等价物code@Vijender当前位置请就此提出一个新问题(无论如何,这个问题可能过于宽泛)。