Tengo una matriz 2d como esta:
const sample = [ ['', 'Name 1', ''], ['Name 2', '', 'Name 3'], ['', 'Name 4', 'Name 5'] ]Estoy tratando de escribir una función para devolver verdadero si el índice del nombre de entrada es 0 o 1; de lo contrario, devolverá falso.
Tengo esto:
function isIndexZeroOrOne(arr, name) { for (const row of arr) { const i = row.indexOf(name) return i === 0 || i === 1 ? true : false } }Sin embargo, solo parece funcionar para la primera submatriz en la muestra (es decir, muestra [0])
No funciona para el Nombre 2: console.log(isIndexZeroOrOne(sample, 'Name 2')) falso aunque debería ser verdadero (porque el índice del Nombre 2 es 0)
¿Qué estoy haciendo mal?
La declaración de return finaliza el ciclo y sale de la función, por lo que solo está verificando el primer subarreglo.
Solo debe regresar inmediatamente cuando la condición coincida, no cuando falle, de modo que continúe probando otros elementos de la matriz.
function isIndexZeroOrOne(arr, name) { for (const row of arr) { const i = row.indexOf(name) if (i === 0 || i === 1) { return true; } } return false; } O use el método some() .
function isIndexZeroOrOne(arr, name) { return arr.some(el => el[0] === name || el[1] === name); }Creo que es la forma en que has escrito el ternario. Está evaluando cosas como esta:
return (i === 0) || (i === 1 ? true : false)Sería mejor hacer:
if (i=== 1 || i === 0) return true Por el momento, solo está verificando la primera fila porque siempre devuelve true o false .