La función checkWin devuelve verdadero cuando una matriz que son números de índice tiene un símbolo especificado en los índices de otra matriz. ¿Cómo recuperar la "condición" (matriz) que resulta verdadera de la matriz winConditions anidada?
Los símbolos se rellenan con el detector de eventos de clic.
El resultado esperado debería ser, si .some(cond) se vuelve verdadero, entonces devuelve esa cond para, por ejemplo. si el símbolo "X" está presente en [0, 1, 2], devuelva esta matriz
let testArray = Array(9).fill("") const winConditions = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6], ]; let xValue = "X"; let oValue = "O"; function checkWin(value, array) { return winConditions.some((cond) => cond.every((index) => array[index] == value)); } console.log(checkWin(xValue, testArray)); console.log(checkWin(oValue, testArray));Puede usar .find() en lugar de .some() , esto devolverá la primera matriz para la que la devolución de llamada .every() devuelve true . Puede usar esta matriz para determinar si hubo una victoria o no para un jugador en particular:
const testArray = Array(9).fill(""); testArray[3] = testArray[4] = testArray[5] = "O"; // test winning position const winConditions = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6], ]; const xValue = "X"; const oValue = "O"; function getWinPos(value, array) { return winConditions.find((cond) => cond.every((index) => array[index] == value) ); } const xWinPos = getWinPos(xValue, testArray); const oWinPos = getWinPos(oValue, testArray); if(xWinPos) { // found a winning position row/col/diag for "X" console.log(xWinPos); } else if(oWinPos) { // found a winning row/col/diag for "O" console.log(oWinPos); }