Trier une carte par Map en JavaScript

Trier une carte par valeur en JavaScript #

Pour trier une carte par valeur :

  1. Obtenez un tableau des entrées de la carte en utilisant la syntaxe étendue (…)
  2. Appeler la méthode sort() sur le tableau
  3. Passez le résultat à la méthode Map() constructeur

const map2 = new Map([
  ['three', 3],
  ['one', 1],
  ['two', 2],
]);


const sortNumAsc = new Map([...map2].sort((a, b) => a[1] - b[1]));


console.log(sortNumAsc);


const sortedNumDesc = new Map([...map2].sort((a, b) => b[1] - a[1]));


console.log(sortedNumDesc);


const map1 = new Map([
  ['three', 'c'],
  ['one', 'a'],
  ['two', 'b'],
]);


const sortedAsc = new Map([...map1].sort((a, b) => (a[1] > b[1] ? 1 : -1)));


console.log(sortedAsc);


const sortedDesc = new Map([...map1].sort((a, b) => (a[1] > b[1] ? -1 : 1)));


console.log(sortedDesc);

L’extrait de code montre comment trier une carte par valeur dans l’ordre croissant et décroissant pour les valeurs de chaînes et de nombres.
pour les chaînes de caractères et les valeurs numériques.

Le site
Map
se souvient de l’ordre d’insertion des clés.

C’est pourquoi nous avons utilisé la méthode
Map()
pour créer un nouveau Map avec l’ordre correct.

Le site
syntaxe d’étalement (…)
nous permet d’obtenir un tableau contenant les entrées de la carte.

const map2 = new Map([
  ['three', 3],
  ['one', 1],
  ['two', 2],
]);


console.log([...map2]);

L’étape suivante consiste à appeler la méthode
sort()
sur le tableau, en lui passant une fonction.

La fonction que nous avons passée à la méthode sort() définit l’ordre de tri.

La fonction est appelée avec 2 paramètres. Dans notre exemple – 2 tableaux
contenant des paires clé-valeur.


const map2 = new Map([
  ['three', 3],
  ['one', 1],
  ['two', 2],
]);


const sortNumAsc = new Map([...map2].sort((a, b) => a[1] - b[1]));


console.log(sortNumAsc);

Le site sort() utilise la logique suivante pour trier les éléments du tableau :

  • Si la valeur de retour de la fonction de comparaison est supérieure à 0alors trier b
    avant a.
  • Si la valeur de retour de la fonction de comparaison est inférieure à 0alors trier a
    avant b.
  • Si la valeur de retour de la fonction compare est égale à 0, conservez l’ordre original
    l’ordre initial de a et b.

Dans l’extrait de code ci-dessus :

  • Si le deuxième élément (la valeur) de la balise a moins le deuxième élément du tableau
    le site b renvoie une valeur supérieure à 0nous trions b avant a
  • Si la soustraction retourne un nombre négatif, nous trions a avant b.
  • Si la soustraction donne 0nous conservons l’ordre original de a et b.

Si vous avez besoin de trier la carte par valeur dans l’ordre décroissant, il suffit de
soustraire la valeur de a de la valeur de b.


const map2 = new Map([
  ['three', 3],
  ['one', 1],
  ['two', 2],
]);


const sortedNumDesc = new Map([...map2].sort((a, b) => b[1] - a[1]));


console.log(sortedNumDesc);

Nous avons utilisé la même approche pour trier une Map par valeurs de chaîne.


const map1 = new Map([
  ['three', 'c'],
  ['one', 'a'],
  ['two', 'b'],
]);


const sortedAsc = new Map([...map1].sort((a, b) => (a[1] > b[1] ? 1 : -1)));


console.log(sortedAsc);

Cette fois-ci, nous vérifions si la valeur de l’unité de code UTF-16 de la valeur dans le fichier a tableau
est supérieure à la valeur du tableau b et renvoie 1 si c’est le cas et -1
sinon.

Si nous retournons 1 (supérieur à 0), alors nous trions b avant a.

Vous pouvez changer le classement en ordre décroissant en changeant la place des éléments suivants 1 et
-1.


const map1 = new Map([
  ['three', 'c'],
  ['one', 'a'],
  ['two', 'b'],
]);


const sortedDesc = new Map([...map1].sort((a, b) => (a[1] > b[1] ? -1 : 1)));


console.log(sortedDesc);

Laisser un commentaire