forEach回调的返回值在哪里?

这个问题在这里已经有了答案:

  • 如何使Array.forEach短路像调用break? 24个答案

  • 您可以跳出循环,但返回值未使用。

    由于forEach本身不返回任何东西,因此从回调中收集返回值没有什么意义。

    要爆发,你需要在回调期间throw

    var newForEach = function (obj, func, con) {
        if (Pub.isType("Function", func)) {
            Object.keys(obj).forEach(function (key) {
                if (func.call(con, obj[key], key, obj)) {
                    throw new Error('something terrible happened!');
                }
            });
        }
    };
    

    但是 ,这看起来像是流量控制的异常,这是非常糟糕的事情。 如果这就是你正在做的事情,那么可能有其他更有用的数组方法:可能是everyfilter


    返回值无处可去。

    如果你想突破forEach ,那就用some代替。 当你返回一个真值时它会中断。

    来自forEach的MDN文档:

    没有办法停止或破坏forEach()循环,而不是抛出异常。 如果你需要这样的行为, forEach()方法是错误的工具,请使用纯循环代替。 如果您正在为谓词测试数组元素并需要布尔返回值,则可以使用every()some()来代替。 如果可用,则新方法find()findIndex()也可用于提前终止真谓词。

    链接地址: http://www.djcxy.com/p/70057.html

    上一篇: Where does the return value go for a forEach callback?

    下一篇: return false or true while iterating an array of object