假设我有如下代码
[1,2,3].forEach((number)=>{
console.log(number)
})
我的需求是当遍历到 number === 2 的时候,停止 forEach 遍历,按正常逻辑,应该将 forEach 替换为 for 循环,然后在 for 循环中执行 break 操作,但是也可以在 forEach 中,通过 throw new Error()
的方式,终止遍历,如下代码所示
[1,2,3].forEach((number)=>{
if(number === 2){
throw new Error()
}
console.log(number)
})
想问下大家,通过「抛出错误的方式」停止 forEach 遍历,是否可行呢?
1
molvqingtai 2023-06-20 12:29:14 +08:00 via Android
如果你需要校验入参抛出错误,没问题
如果你只是想找到某个值停止循环,不建议使用这种方式 |
2
ayase252 2023-06-20 12:30:38 +08:00 via iPhone
找第一个用 find ,forEach 不是用来查找的
|
3
ZLY201 2023-06-20 12:39:25 +08:00
Array.prototype.some
Array.prototype.every 应该能满足需求 |
4
sweetcola 2023-06-20 12:44:58 +08:00
抛出错误会导致 forEach 下面的代码也无法执行,而且还要处理报错,十分不建议。
不想用 for 的话就对数组进行预处理 ``` arr.slice(0, arr.findIndex(v => v === 2) + 1).forEach ``` |
5
wubalabadub 2023-06-20 12:47:49 +08:00
你也不想打开 console 里面一堆红叉叉吧
|
6
taotaodaddy 2023-06-20 12:48:15 +08:00
这就是能用而不好的方式
|
7
ChefIsAwesome 2023-06-20 12:53:54 +08:00 1
我接手过更有意思的代码,拿 map 当 find 用。你说它不能用吧,它也确实达到效果了。
let result someArray.map(i => { if (...) result = i }) |
8
qingshui33 2023-06-20 13:07:29 +08:00
所以怎么终止 forEach 循环呢
|
9
crysislinux 2023-06-20 13:09:18 +08:00 via Android
这就是该用传统 for 的时候了
|
10
Ritr 2023-06-20 14:24:25 +08:00
@qingshui33 用 return 结束掉整个 function
|
11
Ritr 2023-06-20 14:25:37 +08:00
forEach 是迭代,不断的去 next next next ,不适合这种情况,使用 some 或者 find ,使用 for 也可
|
12
kdwnil 2023-06-20 14:30:04 +08:00 via Android
想起之前用 filter(()=>...)[0] 来找第一个。。。
|