La siguiente función crea un objeto Map a partir de dos matrices. Estoy tratando de ordenar el mapa por clave en un nuevo objeto de mapa usando el método de ordenación, como se muestra en Mozilla Docs. El objeto mapSort está ordenando correctamente todas las claves, además del hecho de que está colocando la primera clave en el último índice.
const sortMapByKey = () => { const keyArray = [4, 6, 16, 18, 2] const valueArray = [103, 123, 4444, 99, 2000] const buildMap = (keys, values) => { const map = new Map(); for(let i = 0; i < keys.length; i++){ map.set(keys[i], values[i]); }; const mapSort = new Map([...map.entries()].sort(function(a, b) { return a - b; })); return mapSort }; return buildMap(keyArray, valueArray) }La salida actual:
Map { 4 => '103', 6 => '123', 16 => '4444', 18 => '99', 2 => '2000' }La salida deseada:
Map { 2 => '2000', 4 => '103', 6 => '123', 16 => '4444', 18 => '99' }¿Alguna pista sobre lo que estoy haciendo mal con mi tipo?
Las entradas son un par clave-valor, por ejemplo, [1, 103] . Hacer return a - b intenta restar dos matrices de este tipo, lo que no tiene sentido: primero debe extraer la clave del par de entrada.
const mapSort = new Map([...map.entries()].sort(function(entryA, entryB) { return entryA[0] - entryB[0]; })); const keyArray = [4, 6, 16, 18, 2] const valueArray = [103, 123, 4444, 2000] const buildMap = (keys, values) => { const map = new Map(); let objectArray = [] for (let i = 0; i < keys.length; i++) { map.set(keys[i], values[i]); }; const mapSort = new Map([...map.entries()].sort(function(entryA, entryB) { return entryA[0] - entryB[0]; })); return mapSort }; console.log(buildMap(keyArray, valueArray));o desestructurar:
const mapSort = new Map( [...map.entries()] .sort(([a], [b]) => a - b) ); const keyArray = [4, 6, 16, 18, 2] const valueArray = [103, 123, 4444, 2000] const buildMap = (keys, values) => { const map = new Map(); let objectArray = [] for (let i = 0; i < keys.length; i++) { map.set(keys[i], values[i]); }; const mapSort = new Map( [...map.entries()] .sort(([a], [b]) => a - b) ); return mapSort }; console.log(buildMap(keyArray, valueArray));