3
votes

JavaScript: trier un tableau d'objets par une propriété numérique dans chaque objet

J'ai du mal à comprendre comment utiliser la méthode array.sort () pour trier un tableau d'objets en fonction d'une valeur numérique trouvée dans chaque objet. Essentiellement, j'ai un scénario de la forme suivante:

var myarray = []
myarray.push({name: "alex", age: 8})
myarray.push({name: "ben", age: 57})
myarray.push({name: "dan", age: 32})

L'ordre initial du résultat serait "alex, ben, dan". Maintenant, je veux trier ce tableau par âge, afin que les personnes les plus âgées soient les premières sur la liste. Après le tri, l'ordre devrait être "ben, dan, alex". Comment y parvenir de la manière la plus simple possible?


1 commentaires

4 Réponses :


7
votes

Vous pouvez utiliser affectation de déstructuration et le .sort code > méthode comme celle-ci:

var myarray = []
myarray.push({name: "alex", age: 8})
myarray.push({name: "ben", age: 57})
myarray.push({name: "dan", age: 32});

var res = myarray.sort((a, b) => b.age-a.age);
console.log(res);

Ou, si vous ne vous sentez pas à l'aise avec la destruction, vous pouvez utiliser des notation par points pour accéder à la propriété age :

var myarray = []
myarray.push({name: "alex", age: 8})
myarray.push({name: "ben", age: 57})
myarray.push({name: "dan", age: 32});

var res = myarray.sort(({age:a}, {age:b}) => b-a);
console.log(res);

Le fonctionnement de .sort est défini par ce que vous retournez de la fonction de rappel que vous transmettez. Si vous retournez:

  • puis a viendra avant b .
  • 0 puis gardez a et b dans les mêmes positions
  • > = 1 puis b viendra avant a

Ainsi, en calculant la différence entre les deux âges, cela donne "naturellement" les valeurs correctes pour trier correctement votre tableau.


3 commentaires

Cela a une sortie incorrecte - ce devrait être ben , dan , alex comme indiqué dans la question.


Je pense que la destruction ajoute un niveau de complexité inutile pour les débutants. age => age.b - age.a le rend beaucoup plus facile à lire.


@AdrianBrand ouais, je peux voir ça. J'ai ajouté une alternative



5
votes

XXX

myarray.sort(function(a,b){return b.age - a.age})

Description détaillée du tri la fonction peut être trouvée ici https://developer.mozilla.org/en -US / docs / Web / JavaScript / Reference / Global_Objects / Array / sort

* Modifié pour trier par ordre décroissant comme OP demandé


0 commentaires

4
votes
defaultCompare = (a, b) => (!a && !b ? 0 : !a ? -1 : !b ? 1 : a < b ? -1 : a > b ? 1 : 0);

0 commentaires

0
votes

Merci à tous. Je l'ai résolu en utilisant cette option:

data.sort(function(a, b) { return b.score - a.score })


0 commentaires