return false
будет выходить только из анонимной функции (item, x) => {}
, а не isDiagonalLeftWristband()
, как вы ожидаете. После выполнения двух forEach
isDiagonalLeftWristband()
всегда будет return true
в конце. Вы можете использовать циклы, чтобы избежать этой проблемы.
const isDiagonalLeftWristband = (band) => {
for (let [y, row] of band.entries()) {
for (let [x, item] of row.entries()) {
for(let i = 0; (i < band[y].length - x) && (i < band.length - y); i++) {
if (band[y][x] !== band[y+i][x+i]) {
console.log(false) //FALSE GETS OUTPUTTED MULTIPLE TIMES
return false;
}
}
}
}
return true;
}
const band3 = [
["A", "B", "C"],
["C", "Z", "B"],
["B", "C", "A"],
["A", "B", "C"]
];
console.log(isDiagonalLeftWristband(band3))
forEach
не предназначен для досрочного прекращения. Он всегда будет перебирать все элементы. (это во имя :)). Из документации MDN:
Нет способа остановить или прервать forEach () l oop, кроме как с помощью исключения. Если вам нужно такое поведение, метод forEach () является неправильным инструментом.
Раннее завершение может быть выполнено с помощью:
A simple for loop
A for...of / for...in loops
Array.prototype.every()
Array.prototype.some()
Array.prototype.find()
Array.prototype.findIndex()
Методы массива: every (), some (), find () и findIndex () проверяют элементы массива с помощью предиката, возвращающего истинное значение, чтобы определить, требуется ли дальнейшая итерация.
Вместо этого можно использовать одну из предложенных функций, предназначенных для проверки элементов массив с предикатом. every()
проверяет, проходят ли все элементы массива какой-либо тест; что, по крайней мере, семантически, то, что вам нужно.
const isDiagonalLeftWristband = (band) => {
return band.every((row, y) => {
return row.every((item, x) => {
for(let i = 0; (i < band[y].length - x) && (i < band.length - y); i++) {
if (band[y][x] !== band[y+i][x+i]) {
return false;
}
}
return true;
});
});
}
const band3 = [
["A", "B", "C"],
["C", "B", "B"],
["B", "C", "A"],
["A", "B", "C"]
];
console.log(isDiagonalLeftWristband(band3))