Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

253
Vistas
Cálculo del segundo número más grande en la matriz (Javascript): parece funcionar en Sandbox pero falla la prueba de Hackerrank

Intenté determinar el segundo número más grande en una matriz (Javascript) en CodeSandbox. Parece funcionar bien, pero falla en las pruebas de CodeWars. Agregué una matriz ficticia solo para ejecutar mis propias pruebas en Sandbox. (Ten piedad, soy un principiante y esta es mi primera pregunta de StackOverFlow)

 const nums = [3, 100.3, 88, 1, -2.4, 9, 18]; const getSecondLargest = (nums) => { const descending = nums.sort((a, b) => b - a); return descending[1]; }; console.log(getSecondLargest(nums)); // console returns 88

EDITAR: De acuerdo, con mi cerebro súper cansado dije CodeWars, cuando en realidad me refería a Hackerrank (¡lo siento mucho!). Me di cuenta de que no necesariamente probaron con NaN, pero tenían números repetidos, por lo que usar el índice de [1] no es lo ideal. El ejercicio es de los 10 Días de Javascript - Día 3: Matrices https://hackerrank.com/domains/tutorials/10-days-of-javascript

Así que ahora probé este código a continuación, y pasa ... pero mi código parece un poco raro, ¿hay una forma más limpia de escribir esto y puedo combinarlo con la lógica isNan entonces?

 const nums = [3, 100, 88, 100, -2.4, 9, 18]; const getSecondLargest = (nums) => { const ascending = nums.sort((a, b) => a - b); if (ascending[ascending.length - 2] === ascending[ascending.length - 1]) { return ascending[ascending.length - 3]; } else { return ascending[ascending.length - 2]; } }; console.log(getSecondLargest(nums)); // console returns 88
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Parece que tal vez haya cadenas en la matriz y debe manejar eso. Aquí hay algunas maneras:

Una es filtrar las cosas no numéricas antes de clasificarlas. Puede usar isNaN() para probar si un objeto "no es un número".

 const getSecondLargest = (nums) => { const descending = nums .filter(n => !isNaN(n)) .sort((a, b) => b - a); return descending.length < 2 ? undefined : descending[1]; };

Otra opción es manejar las cadenas en la clasificación. Empújelos hasta el final de la matriz:

 const getSecondLargest = (nums) => { const descending = nums.sort((a, b) => { if (isNaN(a) && isNaN(b)) return 0; if (isNaN(a)) return 1; if (isNaN(b)) return -1; return b - a; }); return descending.length < 2 || isNaN(descending[1]) ? undefined : descending[1]; };

Una tercera forma es un bucle for simple que realiza un seguimiento de los 2 valores más altos:

 const getSecondLargest = (nums) => { let max1 = undefined; let max2 = undefined; for (let n of nums) { if (isNaN(n)) continue; if (max2 === undefined || n > max2) { if (max1 === undefined || n > max1 ) { max2 = max1; max1 = n; } else { max2 = n; } } } return max2; }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda