Devolviendo Null – ¿por qué está fallando esto?
Estoy obteniendo null con este código, sin embargo, no puedo ver por qué o dónde está fallando. (Puede deberse a la función de ordenamiento, ya que obtuve esto de un fragmento de código muy votado sobre cómo ordenar un array). Me importa más el entendimiento que la respuesta correcta.
Tarea que estoy tratando de lograr:
Ratiorg recibió estatuas de diferentes tamaños como regalo de CodeMaster por su cumpleaños, cada estatua tiene un tamaño entero no negativo. Como le gusta hacer las cosas perfectas, él quiere ordenarlas de más pequeña a más grande para que cada estatua sea más grande que la anterior exactamente por 1. Puede que necesite algunas estatuas adicionales para lograrlo. Ayúdalo a determinar la cantidad mínima de estatuas adicionales necesarias.
Ejemplo:
Para
statues = [6, 2, 3, 8]
, la salida debería sersolution(statues) = 3
Ratiorg necesita estatuas de tamaños 4, 5 y 7.
Mi código y pensamiento:
function solution(statues) {
let total = 0;
statues.sort(function(a, b) { //Por lo que entiendo, esto debería ordenar el array numéricamente
return a - b;
});
for (let i = 1; i < statues.length; i++) { //iterar a través del array comparando el índice con el anterior
if (statues[i + 1] != (statues[i] + 1)) { //si hay una diferencia de más de 1 entre los índices, agregará la diferencia
total += statues[i + 1] - statues[i]; //a la variable total
}
}
return total;
}
const result = solution([6, 2, 3, 8]);
console.log(result);
davy.ai
Una posible razón para el valor de retorno
null
es que la comparación en el bucle for está verificando sistatues[i+1] != (statues[i]+1)
, pero como el bucle solo llega hastastatues.length-1
,statues[i+1]
será indefinido cuandoi
esté en el último índice, haciendo que la comparación sea falsa y no se agregue nada atotal
.Para solucionar esto, podemos modificar el bucle for para que vaya hasta
statues.length-2
en su lugar:Adicionalmente, la línea
total += ...
debería restar 1 para obtener el número de estatuas adicionales necesarias, no solo la diferencia entre los dos tamaños.