javascript - LINQ Group by & Select FirstOrDefault() 的 Lodash 或 JavaScript 等价物

标签 javascript typescript lodash

我有商店的列表,其中有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/

相关文章:

javascript - lodash _.findIndex 通过多个值

javascript - 创建弹出浏览器小部件

javascript - 预期的表达式为 '_item_ in _collection_[ track by _id_]' 形式,但得到了

typescript - Typescript 中 Mongoose 模式的函数参数类型?

javascript - 单击图标无法导航到新页面

javascript - 对每个数组成员进行计算

javascript - 如何使用 CSS 或 JavaScript 对 SVG 路径进行动画处理或过渡?

javascript - 全部居中并根据数据长度调整excel列

javascript - Visual Studio 2015 Update 2 中的 TypeScript 模块 - 'require' 未定义

javascript - 获取另一个数组中不存在的 JSON 对象