如何打破reduce()
方法的迭代?
for
for (var i = Things.length - 1; i >= 0; i--) {
if(Things[i] <= 0){
break;
}
};
reduce()
Things.reduce(function(memo, current){
if(current <= 0){
//break ???
//return; <-- this will return undefined to memo, which is not what I want
}
}, 0)
发布于 2017-06-23 18:55:16
不要使用reduce。只需使用常规迭代器(for等)对数组进行迭代,并在满足条件时中断。
发布于 2016-03-22 11:33:11
当然,没有办法让reduce
的内置版本过早退出。
但是您可以编写自己的reduce版本,它使用一个特殊的令牌来确定何时应该中断循环。
var EXIT_REDUCE = {};
function reduce(a, f, result) {
for (let i = 0; i < a.length; i++) {
let val = f(result, a[i], i, a);
if (val === EXIT_REDUCE) break;
result = val;
}
return result;
}
像这样使用它,对一个数组求和,但在达到99时退出:
reduce([1, 2, 99, 3], (a, b) => b === 99 ? EXIT_REDUCE : a + b, 0);
> 3
发布于 2017-06-07 02:36:33
Array.every可以提供一种非常自然的机制来中断高阶迭代。
const product = function(array) {
let accumulator = 1;
array.every( factor => {
accumulator *= factor;
return !!factor;
});
return accumulator;
}
console.log(product([2,2,2,0,2,2]));
// 0
https://stackoverflow.com/questions/36144406
复制相似问题