Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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 LINQ Group by&;选择FirstOrDefault()_Javascript_Typescript_Lodash - Fatal编程技术网

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 | |无穷大
如果(aoconsole.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当前位置请就此提出一个新问题(无论如何,这个问题可能过于宽泛)。