forEach回调的返回值在哪里?
这个问题在这里已经有了答案:
您可以跳出循环,但返回值未使用。
由于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!');
}
});
}
};
但是 ,这看起来像是流量控制的异常,这是非常糟糕的事情。 如果这就是你正在做的事情,那么可能有其他更有用的数组方法:可能是every
或filter
。
返回值无处可去。
如果你想突破forEach
,那就用some
代替。 当你返回一个真值时它会中断。
来自forEach
的MDN文档:
没有办法停止或破坏forEach()
循环,而不是抛出异常。 如果你需要这样的行为, forEach()
方法是错误的工具,请使用纯循环代替。 如果您正在为谓词测试数组元素并需要布尔返回值,则可以使用every()
或some()
来代替。 如果可用,则新方法find()
或findIndex()
也可用于提前终止真谓词。
上一篇: Where does the return value go for a forEach callback?
下一篇: return false or true while iterating an array of object