J'ai une liste de magasins qui ont AuthorizationOrder
, je devrai extraire les valeurs firstOrDefault
d'une collection groupée en JavaScript.
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 }
Utilisation de LINQ:
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 }
Comment puis-je effectuer une opération similaire en utilisant Lodash
ou JavaScript pour extraire des données en les regroupant sur store, obtenez la première valeur après la commande sur AuthorizationOrder
.
Aussi, obtenez les entrepôts avec les magasins associés. Veuillez consulter le violon implémenté à l'aide de LINQ
Fiddle: https://dotnetfiddle.net/glC1ij a>
Vous voulez réaliser la même chose avec JavaScript ou Lodash.
3 Réponses :
Vous pouvez utiliser réduire
pour regrouper en fonction du StoreNumber
. Créez un accumulateur avec chaque StoreNumber
unique comme clé comme ceci:
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))
Mettez à jour la valeur si la clé
n'existe pas ou n'est pas actuelle AuthorizationOrder
est inférieur à celui de l'accumulateur. Utilisez ensuite Object.values () code>
pour obtenir uniquement les valeurs d'un tableau:
{ "1": { "StoreNumber": 1, "Warehouse": 4201, "AuthorizationOrder": 1 }, "2": { "StoreNumber": 2, "Warehouse": 4207, "AuthorizationOrder": 1 } }
pouvez-vous s'il vous plaît répondre comment attacher les magasins à l'entrepôt et supprimer les entrepôts si la liste de stockage est vide en javascript, ci-joint est le jsfiddle, je recherche un code équivalent javascript
@VijenderReddyChintalapudi, c'est une question complètement différente.
Vous pouvez le faire en suivant les étapes suivantes:
reduction ()
sur un tableau d'objets et définissez l'accumulateur sur un objet vide {}
. storeNumber
et la valeur des objets. AuthorizationOrder
de l'objet déjà présent à une clé particulière est supérieur au AuthorizationOrder
de l'élément que nous itérons puis changez la valeur de cette clé en l'élément actuel . Sinon, ne le changez pas. Object.values ()
pour obtenir un tableau d'objets.
const arr = [{ 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 res = arr.reduce((ac,a) => { let ao = a.AuthorizationOrder let ao2 = (ac[a.StoreNumber] || {}).AuthorizationOrder || Infinity if(ao < ao2) ac[a.StoreNumber] = a; return ac },{}); console.log(Object.values(res))
pouvez-vous s'il vous plaît répondre comment attacher les magasins à l'entrepôt et supprimer les entrepôts si la liste de stockage est vide en javascript, ci-joint est le jsfiddle en utilisant LINQ, je recherche un code équivalent javascript
@Vijender: veuillez poser une nouvelle question à ce sujet (ce serait probablement trop large de toute façon).
Avec lodash / fp, vous pouvez regrouper les éléments par StoreNumber
, puis mapper chaque groupe à l'élément avec la valeur minimale de AuthorizationOrder
:
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
const { flow, groupBy, map, minBy } = _ const fn = flow( groupBy('StoreNumber'), map(minBy('AuthorizationOrder')) ) 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 result = fn(array) console.log(result)