Quiero escribir una función que tome una matriz como argumento y devuelva cuántos números se pueden dividir entre 12. Sin embargo, si la matriz tiene un número mayor que 111, entonces debería devolver 0; Yo escribí esto:
function isDivisble(array) { let numberOfNum = 0; for(let i=0; i < array.length; i++) { if(array[i] % 12 == 0 && array[i] < 111) { numberOfNum = numberOfNum + 1 ; } else { numberofNum = 0; } } return console.log(numberOfNum); } let test = [12, 24, 36, 44, 55, 255]; isDivisble(test)Me di cuenta de que este código verifica individualmente si el número actual es divisible y no superior a 111 y no globalmente si la matriz tiene un número superior a 111, pero no entiendo cómo hacer una verificación de matriz general. ¿Escribir un bucle for con la declaración if para verificar y luego otro bucle for dentro de la declaración if lo hace un poco espagueti?
Puede usar algunos para verificar si hay algún elemento que sea mayor que 111 primero. Luego puede usar el filtro para obtener el elemento que es divisible por 12. Así:
const isDivisible = (arr) => { if (arr.some((e) => e > 111)) return 0; return arr.filter((e) => e % 12 === 0).length; }; const test = [12, 24, 36, 44, 55, 48]; console.log(isDivisible(test));Modifiqué ligeramente su función que devuelve 0 si un número es mayor que 111; de lo contrario, verifica si es divisible por 12
function isDivisble(array) { let count = 0; for(let i=0; i<array.length; i++){ if(array[i] > 111){ return 0; }else{ if(array[i] % 12 === 0){ count++ } } } return count; } let test = [12, 24, 36, 44, 55, 255]; console.log(isDivisble(test));El método de some matriz hará el truco:
array.some(value => { return value > 111 }) devolverá verdadero si alguno de sus valores es mayor que 111.
También puede verificar si cada valor de matriz respeta una determinada condición usando array.every con una devolución de llamada similar:
array.every(value => { return value <= 111 }) es verdadero solo si cada valor en la matriz es inferior o igual a 111.