JavaScript 中,使用 「抛出错误的方式」停止 forEach 遍历可行吗?会造成什么隐藏问题?

328 天前
 feeeff

假设我有如下代码

[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 遍历,是否可行呢?

839 次点击
所在节点    问与答
12 条回复
molvqingtai
328 天前
如果你需要校验入参抛出错误,没问题
如果你只是想找到某个值停止循环,不建议使用这种方式
ayase252
328 天前
找第一个用 find ,forEach 不是用来查找的
ZLY201
328 天前
Array.prototype.some
Array.prototype.every
应该能满足需求
sweetcola
328 天前
抛出错误会导致 forEach 下面的代码也无法执行,而且还要处理报错,十分不建议。

不想用 for 的话就对数组进行预处理

```
arr.slice(0, arr.findIndex(v => v === 2) + 1).forEach
```
wubalabadub
328 天前
你也不想打开 console 里面一堆红叉叉吧
taotaodaddy
328 天前
这就是能用而不好的方式
ChefIsAwesome
328 天前
我接手过更有意思的代码,拿 map 当 find 用。你说它不能用吧,它也确实达到效果了。
let result
someArray.map(i => {
if (...) result = i
})
qingshui33
328 天前
所以怎么终止 forEach 循环呢
crysislinux
328 天前
这就是该用传统 for 的时候了
Ritr
328 天前
@qingshui33 用 return 结束掉整个 function
Ritr
328 天前
forEach 是迭代,不断的去 next next next ,不适合这种情况,使用 some 或者 find ,使用 for 也可
kdwnil
328 天前
想起之前用 filter(()=>...)[0] 来找第一个。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/950270

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX