Как найти элемент массива внутри if?

Рейтинг: 0Ответов: 1Опубликовано: 14.04.2023

let winningVariants = [
  [0, 1, 2],
  [0, 3, 6],
  [0, 4, 8],
  [2, 5, 8],
  [2, 4, 6],
  [1, 4, 7],
  [3, 4, 5],
  [6, 7, 8]
];
let playBoard = [];

const symbols = ['X', '0'];

function findWinner() {
  for (let g = 0; g < playBoard.length; g++) {
    for (let f = 0; f < winningVariants.length; f++) {
      if (playBoard[g] === symbols[1] &&
        Array.indexOf(playBoard[g]) === winningVariants[f][0] &&
        Array.indexOf(playBoard[g]) === winningVariants[f][1] &&
        Array.indexOf(playBoard[g]) === winningVariants[f][2]) {
        console.log('First player wins!');
      } else if (playBoard[g] === symbols[0] &&
        Array.indexOf(playBoard[g]) === winningVariants[f][0] &&
        Array.indexOf(playBoard[g]) === winningVariants[f][1] &&
        Array.indexOf(playBoard[g]) === winningVariants[f][2]) {
        console.log('Second player wins!');
      }
    }
  }
}

В playBoard добавляются элементы в место по индексу кнопки, на которую нажал пользователь. Я пытаюсь построить проверку, являются ли 3 элемента одинаковые и находятся ли на всех 3 позициях (индексах) из выигрышного варианта. В данном примере я получаю ошибку TypeError: Array.indexOf is not a function.

(In 'Array.indexOf(playBoard[g])', 'Array.indexOf' is undefined).

Как можно ёё исправить или как правильно написать такую проверку?

Ответы

▲ 1Принят

indexOf находится в прототипе Array и его нужно применять на массив в котором требуется найти значение. https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

let winningVariants = [
  [0, 1, 2],
  [0, 3, 6],
  [0, 4, 8],
  [2, 5, 8],
  [2, 4, 6],
  [1, 4, 7],
  [3, 4, 5],
  [6, 7, 8]
];
let playBoard = [];

const symbols = ['X', '0'];

function findWinner() {
  for (let g = 0; g < playBoard.length; g++) {
    for (let f = 0; f < winningVariants.length; f++) {
      if (playBoard[g] === symbols[1] &&
        playBoard.indexOf(playBoard[g]) === winningVariants[f][0] &&
        playBoard.indexOf(playBoard[g]) === winningVariants[f][1] &&
        playBoard.indexOf(playBoard[g]) === winningVariants[f][2]) {
        console.log('First player wins!');
      } else if (playBoard[g] === symbols[0] &&
        playBoard.indexOf(playBoard[g]) === winningVariants[f][0] &&
        playBoard.indexOf(playBoard[g]) === winningVariants[f][1] &&
        playBoard.indexOf(playBoard[g]) === winningVariants[f][2]) {
        console.log('Second player wins!');
      }
    }
  }
}