Tengo dos funciones que verifican si una matriz está ordenada. La primera función parece ser precisa la mayor parte del tiempo, pero no siempre, la segunda parece funcionar de la forma en que se supone que debe hacerlo el 100% del tiempo. Las declaraciones condicionales son las mismas, así que me pregunto qué está causando esta diferencia en el comportamiento.
function test(arr) { for (let i = 0; i < arr.length; i++) { if (arr[i + 1] - arr[i] < 0) { return false } else { return true } } } console.log(test([2, 20, 1])) function test2(arr) { for (let i = 0; i < arr.length; i++) { if (arr[i + 1] - arr[i] < 0) return false; } return true; } console.log(test2([2, 20, 1]))El problema con este código es que está devolviendo un valor en la primera verificación del bucle. En el primer ejemplo de código, probará:
if (arr[i + 1] - arr[i] < 0) { return false } else { return true }ya sea que se cumpla o no la condición, su código está devolviendo algo en el primer ciclo. Recuerde que cuando una función devuelve algo, finaliza inmediatamente y no devolverá ningún otro valor.
En la segunda función, cada vez que pasa por el bucle, SOLO devolverá falso si no se cumple la condición, si se cumple la condición, simplemente continuará. Volverá verdadero al final DESPUÉS de que finalice todo el ciclo.