Nic*_*man 6 javascript foreach for-loop return function
我正在做一个JS 练习的算法挑战。我有一个循环运行的程序,当满足条件时,该函数应该返回 false。然而,当条件满足时,返回不起作用,函数最终总是返回 true。
const isDiagonalLeftWristband = (band) => {
band.forEach((row, y) => {
row.forEach((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]) {
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))Run Code Online (Sandbox Code Playgroud)
输出:
false //from console log
false //from console log
true //from function return statement
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
只会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))Run Code Online (Sandbox Code Playgroud)
forEach并非旨在提前终止。它将始终迭代所有元素。(就在名字里:))。来自 MDN 文档:
除了抛出异常之外,没有其他方法可以停止或中断 forEach() 循环。如果您需要这样的行为,那么 forEach() 方法是错误的工具。
提前终止可以通过以下方式完成:
Run Code Online (Sandbox Code Playgroud)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()测试数组的所有元素是否通过某些测试;至少在语义上,这就是您所需要的。
A simple for loop
A for...of / for...in loops
Array.prototype.every()
Array.prototype.some()
Array.prototype.find()
Array.prototype.findIndex()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2366 次 |
| 最近记录: |