0
votes

JavaScript Réduire la carte dans la carte

J'essaie de trier une gamme d'objets en fonction de la somme de l'une des propriétés de l'objet. Essentiellement, comme ceci: xxx

si nous résumons le document correspondant S, nous obtenions 9, 11 et 2 respectivement, auquel cas je voudrais quelque chose comme ceci: xxx

Je sais que c'est une combinaison de mappe , réduit mais j'ai du mal à voir comment voir comment Consultez-le dans le bon format de réagisme approprié.


0 commentaires

3 Réponses :


0
votes

Vous pouvez le faire avec Trier code>:

p>

var arr=[{id:4,
          tally: [1, 3, 5]},
         {id: 6,
          tally: [2, 3, 6]},
         {id: 9,
          tally: [2, 1, -1]}
]

var result =arr.sort((a,b)=>{
    aa = a.tally.reduce((acc,elem)=>acc+elem,0);
    bb = b.tally.reduce((acc,elem)=>acc+elem,0);
    return bb-aa;
});

console.log(result);


0 commentaires

2
votes

Vous pouvez d'abord calculer la somme dans chaque objet à l'aide de mapper code> et Réduire code> puis trier ce nouvel tableau à l'aide de Trier CODE> PORTÉE, puis supprimer simplement la propriété SUM avec une autre carte mappe code> méthode

p>

const array = [{
    id: 4,
    tally: [1, 3, 5]
  },
  {
    id: 6,
    tally: [2, 3, 6]
  },
  {
    id: 9,
    tally: [2, 1, -1]
  }
]

const sorted = array
  .map(({ tally, ...rest }) => ({
    sum: tally.reduce((r, e) => r + e, 0), tally, ...rest
  }))
  .sort((a, b) => b.sum - a.sum)
  .map(({ sum, ...rest }) => rest)

console.log(sorted)


0 commentaires

0
votes

Vous pouvez accumuler les sommes dans un Carte Code> , où chaque touche est l'identifiant code> d'un objet et chaque valeur est la somme du tableau Tally code> de cet objet. Vous pouvez utiliser .ReRuce () code> pour calculer la somme. Ici, le ACC code> est une valeur accumulée qui démarre comme 0 et est ajoutée à chaque fois que le raccord réduit est appelé.

Une fois que vous avez les sommes pour chaque objet, vous pouvez trier en fonction des sommes de Chaque objet utilisant .sort () code> Comme: p>

p>

const array = [{ id: 4, tally: [1, 3, 5] }, { id: 6, tally: [2, 3, 6] }, { id: 9, tally: [2, 1, -1] }];
const sumMap = new Map(array.map(
  ({id, tally}) => [id, tally.reduce((acc, n) => acc+n, 0)])
);
const res = array.sort((a, b) => sumMap.get(b.id) - sumMap.get(a.id));

console.log(res);


0 commentaires