我正在尝试找出一种在使用JavaScript reduce
函数时有条件地摆脱迭代的方法。
鉴于以下代码对一个整数数组求和,并将返回数字10
:
[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, currentIndex, array) {
return previousValue + currentValue;
});
我该怎么做:
[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, currentIndex, array) {
if(currentValue === "WHATEVER") {
// SKIP or NEXT -- don't include it in the sum
}
return previousValue + currentValue;
});
答案 0 :(得分:28)
您可以返回previousValue
[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, currentIndex, array) {
if(currentValue === "WHATEVER") {
return previousValue;
}
return previousValue + currentValue;
});
答案 1 :(得分:2)
如果条件为true
,则可以简单地使用三元运算符传递前一个值;如果false
则可以执行特定操作
[0, 1, 2, 3, 4].reduce((previousValue, currentValue, currentIndex, array)=> {
return(condition)? previousValue : previousValue + currentValue;
});
答案 2 :(得分:0)
另一种方法是放置一条if语句,在那儿执行归约逻辑,而忽略其他条件。 例如:
代替这样做:
new TableTimetableAdapter(Repo.getValue());
这很完美:
let a = sorted.reduce((item,total)=>{
if(total+item > k) return total;
ans++;
return total + item;
})