我有一个数组。我有一个函数可以检查数组是否包含数字“2”。
如果找到该数字,我希望该函数返回 true。如果不是,它应该返回 false。
我写了这个:
function hasTwo(arr) {
arr.forEach((x) => {
if (x === 2) {
console.log("Two!")
return true
}
})
console.log("No two :(")
return false
}
let arr = [1,2,3,4,5,6]
console.log(hasTwo(arr))
Run Code Online (Sandbox Code Playgroud)
我的期望是,在第二次 forEach 迭代中,if 条件将得到满足,函数将返回 true。
但是,这是控制台输出:
Two!
No two :(
false
Run Code Online (Sandbox Code Playgroud)
我相信第一个 return 语句是从条件块返回,而不是从封闭函数返回。(是对的吗?)
我用变量重写了函数来存储返回值:
function hasTwo(arr) {
let result = false
arr.forEach((x) => {
if (x === 2) {
console.log("Two!")
result = true
}
})
return result
}
Run Code Online (Sandbox Code Playgroud)
但如果满足 x === 2 条件,我看不出该函数继续存在的意义。有没有办法返回一个值并立即退出函数?
该return语句立即从它所在的函数返回,而不是从所有周围的函数返回。
除了抛出异常之外,您无法停止.forEach()迭代,如果您担心性能,这会适得其反。你可以做的是使用.some():
var result = arr.some((x) => { return x === 2; });
Run Code Online (Sandbox Code Playgroud)
.some()一旦其中一个回调返回,迭代就会停止true。
也许使用.indexOf而不是自己迭代?
function hasTwo(arr) {
return arr.indexOf(2) !== -1
}
let arr = [1,2,3,4,5,6]
console.log(hasTwo(arr))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |