Trier une carte par valeur en JavaScript #
Pour trier une carte par valeur :
- Obtenez un tableau des entrées de la carte en utilisant la syntaxe étendue (…)
- Appeler la méthode
sort()
sur le tableau - 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 à
0
alors trierb
avanta
. - Si la valeur de retour de la fonction de comparaison est inférieure à
0
alors triera
avantb
. - Si la valeur de retour de la fonction compare est égale à
0
, conservez l’ordre original
l’ordre initial dea
etb
.
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 siteb
renvoie une valeur supérieure à0
nous trionsb
avanta
- Si la soustraction retourne un nombre négatif, nous trions
a
avantb
. - Si la soustraction donne
0
nous conservons l’ordre original dea
etb
.
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);