@dddddd3gun

Есть 3 элемента массива, при их сравнении ничего не происходит?

const board = [['x', 'x', 'x'],
                        ['o', 'o', 'x'],
                        ['o', 'x', 'o']];


if (board[0][0] === board[0][1] === board[0][2]){
  console.log(`Победил ${board[0][0]}`)
}
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
Alexandre888
@Alexandre888
Javascript-разработчик
операции сравнения в JS выполняются подвое, слева направо.

это значит, что сначала в if-выражении выполнится сравнение первых двух элементов board[0][0] === board[0][1], после чего, полученное значение (trueилиfalse) будет сравниваться с оставшимся элементом.
board[0][0] === board[0][1] /* 1 этап: получили true */
true === board[0][2] /* 2 этап: получили false, т.к true сравнивается с "x" */

чтобы всё работало так, как задумано, нужно воспользоваться оператором &&:
if (board[0][0] === board[0][1] && board[0][1] === board[0][2]) { ... }
или же, для улучшения читаемости кода, можно добавить функцию:
const isEqual = (value, ...values) => values.every(el => el === value);
/* 1 параметр (value) - это значение, с которым будут сравниваться все остальные переданные в функцию значения */

isEqual(board[0][0], board[0][1], board[0][2]) // true
isEqual(7, 7, 7, 7, 7, 7, 6) // false
isEqual(1, 1, 1, 1, 1, 1) // true
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы