indexOf("1") devuelve -1 , cuando hay un 1 en mi matriz.
Quiero saber dónde está cada posición de "1", porque eventualmente quiero crear un ciclo para contar cuántas veces "1" está en la matriz.
var first_sudoku = [ ["X", "X", "X", "X"], ["1", "X", "2", "X"], ["X", "1", "4", "X"], ["2", "X", "X", "1"], ]; function counter_for_numbers_in_chart(sudoku) { console.log(sudoku.indexOf("1")); } counter_for_numbers_in_chart(first_sudoku);En realidad, desea verificar las matrices anidadas en busca de "1". Podría hacerlo así
var first_sudoku = [ ["X", "X", "X", "X"], ["1", "X", "2", "X"], ["X", "1", "4", "X"], ["2", "X", "X", "1"], ]; var found = -1; for (var i = 0; i < first_sudoku.length; i++) { if(first_sudoku[i].indexOf("1")) { found = i; break; } } que establecería found en la primera posición en la matriz original que tenía el elemento con "1" en él, o encontrado sería -1 si no se encuentra ... así que un poco como .indexOf
Puede intentar agregar for of loop en su función
var first_sudoku = [ ["X", "X", "X", "X"], ["1", "X", "2", "X"], ["X", "1", "4", "X"], ["2", "X", "X", "1"], ]; function counter_for_numbers_in_chart(sudoku) { for (const row of sudoku) { console.log(row.indexOf("1")); } } counter_for_numbers_in_chart(first_sudoku);Lo que tienes es una matriz de matrices. Dado que "1" no existe en la matriz en la que lo llamó (que solo tiene otras matrices), obtiene -1 .
En un comentario , dijo que su objetivo real es contar todos los elementos "1" en las matrices. Usarías un bucle anidado para eso:
let count = 0; for (const row of first_sudoku) { for (const value of row) { if (value === "1") { ++count; } } }Ejemplo en vivo:
const first_sudoku = [ ["X", "X", "X", "X"], ["1", "X", "2", "X"], ["X", "1", "4", "X"], ["2", "X", "X", "1"], ]; let count = 0; for (const row of first_sudoku) { for (const value of row) { if (value === "1") { ++count; } } } console.log(count); // 3