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)