
假设我有如下代码
[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 我接手过更有意思的代码,拿 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] 来找第一个。。。 |