Saltar al contenido

¿Cómo ordenar un mapa por valor en JavaScript?

Traemos la mejor respuesta que hallamos por todo internet. Queremos que te sea útil y si puedes aportar cualquier detalle que nos pueda ayudar a perfeccionar nuestra información puedes hacerlo..

Solución:

const myMap = new Map();
myMap.set("a",3);
myMap.set("c",4);
myMap.set("b",1);
myMap.set("d",2);

// sort by value
const mapSort1 = new Map([...myMap.entries()].sort((a, b) => b[1] - a[1]));
console.log(mapSort1);
// Map(4) "c" => 4, "a" => 3, "d" => 2, "b" => 1

const mapSort2 = new Map([...myMap.entries()].sort((a, b) => a[1] - b[1]));
console.log(mapSort2);
// Map(4) "b" => 1, "d" => 2, "a" => 3, "c" => 4

// sort by key
const mapSort3 = new Map([...myMap.entries()].sort());
console.log(mapSort3);
// Map(4) "a" => 3, "b" => 1, "c" => 4, "d" => 2

const mapSort4 = new Map([...myMap.entries()].reverse());
console.log(mapSort4);
// Map(4) "d" => 2, "b" => 1, "c" => 4, "a" => 3

Yo podría tomar un enfoque diferente y cambiar Symbol.iterator de Map.prototype[@@iterator]() para un resultado ordenado personalizado.

var map = new Map();

map.set("orange", 10);
map.set("apple", 5);
map.set("banana", 20);
map.set("cherry", 13);

map[Symbol.iterator] = function* () 
    yield* [...this.entries()].sort((a, b) => a[1] - b[1]);


for (let [key, value] of map)      // get data sorted
    console.log(key + ' ' + value);


console.log([...map]);              // sorted order
console.log([...map.entries()]);    // original insertation order
.as-console-wrapper  max-height: 100% !important; top: 0; 

En ES6 puede hacerlo así: (suponga que su objeto Map es m).

[...m].map(e => return e[1];).slice().sort(function(a, b) 
  return a - b; 
);

el operador de propagación convierte un objeto Map en un arrayluego saca el segundo elemento de cada subarreglo para construir un nuevo array, luego ordenarlo. Si desea ordenar en orden descendente, simplemente reemplace a - b con b - a.

Te invitamos a animar nuestra tarea mostrando un comentario o dejando una valoración te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *