Estoy tratando de obtener la clave que tiene el valor máximo en el map que he creado a través del new Map() y agregué las claves y los valores en él.
Ahora, quería obtener la clave cuyo valor es máximo y si dos claves tienen los mismos valores, quiero devolver la lexicográficamente más grande.
Por ejemplo: {'a': 20, 'b':20} entonces quiero que b sea devuelto.
mi código:
var slowestKey = function(releaseTimes, keysPressed) { let map=new Map(); map.set(keysPressed[0],releaseTimes[0]); for(let i=0; i<releaseTimes.length-1; i++){ let time=releaseTimes[i+1]-releaseTimes[i]; map.set(keysPressed[i+1],time); } let max= Math.max(...map.values()); console.log(map) console.log(Math.max(...map.values())); };Aporte:
Input: releaseTimes = [9,29,49,50], keysPressed = "cbcd" Expected Output: "c"
consola.log:
Map(3) { 'c' => 20, 'b' => 20, 'd' => 1 } 20¿Cómo puedo obtener la clave cuyo valor es máximo y lexicográficamente mayor?
Al tener una matriz de pares clave/valor, puede ordenar por
y toma el primer par (índice 0 ).
const pairs = [['c', 9], ['b', 29], ['c', 49], ['d', 50], ['a', 50]]; pairs.sort((a, b) => b[1] - a[1] || b[0].localeCompare(a[0])); console.log(pairs[0]);Con el filter puede filtrar las keys cuyo valor = valor max , luego puede sort y obtener el primer elemento.
Entonces, el código adicional será
const [key] = [...map.keys()].filter(key => { return map.get(key) === max }).sort((a, b) => a - b) var slowestKey = function(releaseTimes, keysPressed) { let map=new Map(); map.set(keysPressed[0],releaseTimes[0]); for(let i=0; i<releaseTimes.length-1; i++){ let time=releaseTimes[i+1]-releaseTimes[i]; map.set(keysPressed[i+1],time); } let max= Math.max(...map.values()); const [key] = [...map.keys()].filter(key => { return map.get(key) === max }).sort((a, b) => a - b) console.log(key) }; slowestKey([9,29,49,50], "cbcd")