Soy un principiante en JavaScript y estoy trabajando en mi primer proyecto: ¡Tic Tac Toe!
Estoy tratando de escribir una función que usará un bucle for/of para mirar a través de todos los espacios en el tablero de juego y devolver una serie de números correspondientes al índice de cualquier espacio que tenga una X.
spaceArray es el tablero de juego, con x aleatorias por ahora.
Aquí está mi intento de la función:
var s = '_' var x = 'X' var O = 'O' var spaceArr = [s, s, s, x, s, s, s, s, x] function spaceChecker(array) { let currGame = [] for (var element of array) { if (element === 'X') currGame.push(array.indexOf(element)) } return currGame } console.log(spaceChecker(spaceArr))Actualmente devuelve:
[ 3, 3 ] ¿Cómo puedo hacer que .indexOf se actualice cada vez que for/of loops?
Ha utilizado indexOf que devolverá el primer índice de la X cada vez que busque X . Si desea usar for..of loop, entonces debe rastrear el index en el que se encuentra.
var s = "_"; var x = "X"; var O = "O"; var spaceArr = [s, s, s, x, s, s, s, s, x]; function spaceChecker(array) { let currGame = []; let index = 0; for (var element of array) { if (element === "X") { currGame.push(index); } index++; } return currGame; } console.log(spaceChecker(spaceArr)); ALTERNATE SOLUTION ⬇
Puede usar reduce aquí para obtener el índice de la X en una matriz
var s = "_"; var x = "X"; var O = "O"; var spaceArr = [s, s, s, x, s, s, s, s, x]; function spaceChecker(array) { return array.reduce((acc, curr, index) => { if (curr === "X") acc.push(index); return acc; }, []); } console.log(spaceChecker(spaceArr));Como no necesita devolver nada del ciclo, puede usar forEach loop.
forEach((element, index) => { // if condition met push index in custom array });El método indexOf() devuelve el primer índice en el que se puede encontrar un elemento dado en la matriz, o -1 si no está presente.
Entonces, su código siempre devolverá 3 porque ese será el primer índice donde se encuentra X en cada iteración.
Es mucho más fácil usar un for/loop básico y empujar el índice de la iteración actual en currGame cuando se encuentra X
const s = '_'; const x = 'X'; const O = 'O'; const spaceArr = [s, s, s, x, s, s, s, s, x]; function spaceChecker(array) { const currGame = []; for (let i = 0; i < array.length; i++) { if (array[i] === 'X') currGame.push(i); } return currGame; } console.log(spaceChecker(spaceArr));