#javascript #arrays #loops
#javascript #массивы #циклы
Вопрос:
Я пытаюсь выяснить, как можно проверить, содержит ли 2D-массив 3 одинаковых значения подряд. Этот 2D-массив будет сгенерирован пользователем, поэтому функция для проверки должна быть динамической.
Например, допустим, пользователь вводит 4×4. Результат будет таким
let arr=[
[" "," "," "," "],
[" "," "," "," "],
[" "," "," "," "],
[" "," "," "," "]
]
Позвольте мне добавить некоторые значения в этот массив
let arr=[
[" "," ","x","x"],
["x","x","x"," "],
[" "," "," "," "],
[" "," "," "," "]
]
Я пытался решить эту проблему с помощью этой функции, но вчера я заметил, что это не работает должным образом.
function checkArray(arr){
for(let i=0;i<arr.length;i ){
let count = 0;
for(let j=0;j<arr[i].length;j ){
if(arr[i][j] === 'x'){
count ;
}
if(count === 3 ){
console.log('x wins')
}
}
}
}
console.log(checkArray(arr)) //count will be 3 and console.logs 'x wins'.
В этот момент я думал, что все работает нормально, пока я не попытался заполнить массив следующим образом. Как вы можете видеть, в строке нет трех X (я имею в виду, что они не идут так — x, x, x), и между ними есть один пробел.
let arr=[
[" "," ","x","x"],
["x","x"," ","x"],
[" "," "," "," "],
[" "," "," "," "]
]
Таким образом, условие не должно выполняться, и функция не должна console.log(‘w wins’) . Но это так. Мой подход к этой проблеме работает для всей строки, а не только если их 3 в строке (x, x, x).
Надеюсь, я это ясно объяснил. Спасибо за ваши советы.
Комментарии:
1. Вместо того, чтобы перебирать массив отверстий для поиска 3 в строке, проверьте каждое направление от позиции, в которую пользователь вставил значение
Ответ №1:
Вам нужно сбросить счетчик, если вы не получите 'x'
.
function checkArray(arr) {
for (let i = 0; i < arr.length; i ) {
let count = 0;
for (let j = 0; j < arr[i].length; j ) {
if (arr[i][j] === 'x') {
count ;
if (count === 3) { // place check after incrementing
console.log('x wins')
return true;
}
} else {
count = 0; // reset
}
}
}
return false;
}
let arr = [
[" ", " ", "x", "x"],
["x", "x", " ", "x"],
[" ", " ", " ", " "],
[" ", " ", " ", " "]
]
console.log(checkArray(arr));
Комментарии:
1. Спасибо! Ваши решения сработали для меня. Я имею в виду, это работает для горизонтального и вертикального. Но теперь для diagonal это не работает.