feeeff
V2EX  ›  问与答

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

  •  
  •   feeeff · Jun 20, 2023 · 2156 views
    This topic created in 1240 days ago, the information mentioned may be changed or developed.

    假设我有如下代码

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

    12 replies  •  2023-06-20 14:30:04 +08:00
    molvqingtai
    molvqingtai
    Jun 20, 2023 via Android
    1
    如果你需要校验入参抛出错误,没问题
    如果你只是想找到某个值停止循环,不建议使用这种方式
    ayase252
    ayase252
    Jun 20, 2023 via iPhone
    2
    找第一个用 find ,forEach 不是用来查找的
    ZLY201
    ZLY201
    Jun 20, 2023
    3
    Array.prototype.some
    Array.prototype.every
    应该能满足需求
    sweetcola
    sweetcola
    Jun 20, 2023
    4
    抛出错误会导致 forEach 下面的代码也无法执行,而且还要处理报错,十分不建议。

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

    ```
    arr.slice(0, arr.findIndex(v => v === 2) + 1).forEach
    ```
    wubalabadub
    wubalabadub
    Jun 20, 2023
    5
    你也不想打开 console 里面一堆红叉叉吧
    taotaodaddy
    taotaodaddy
    Jun 20, 2023
    6
    这就是能用而不好的方式
    ChefIsAwesome
    ChefIsAwesome
    Jun 20, 2023❤️1
    7
    我接手过更有意思的代码,拿 map 当 find 用。你说它不能用吧,它也确实达到效果了。
    let result
    someArray.map(i => {
    if (...) result = i
    })
    qingshui33
    qingshui33
    Jun 20, 2023
    8
    所以怎么终止 forEach 循环呢
    crysislinux
    crysislinux
    Jun 20, 2023 via Android
    9
    这就是该用传统 for 的时候了
    Ritr
    Ritr
    Jun 20, 2023
    10
    @qingshui33 用 return 结束掉整个 function
    Ritr
    Ritr
    Jun 20, 2023
    11
    forEach 是迭代,不断的去 next next next ,不适合这种情况,使用 some 或者 find ,使用 for 也可
    kdwnil
    kdwnil
    Jun 20, 2023 via Android
    12
    想起之前用 filter(()=>...)[0] 来找第一个。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4923 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 02:58 · PVG 10:58 · LAX 18:58 · JFK 21:58
    ♥ Do have faith in what you're doing.