Как пропустить итерацию при использовании reduce в JavaScript?
Я пытаюсь разобраться, как условно прервать итерацию при использовании функции reduce
в JavaScript.
У меня есть следующий код, который суммирует массив целых чисел и возвращает число 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") {
// ПРОПУСТИТЬ или ПЕРЕЙТИ к следующему элементу — не включать его в сумму
}
return previousValue + currentValue;
});
Мне нужно знать, как игнорировать определенные значения, чтобы они не учитывались в итоговой сумме.
3 ответ(ов)
Вы можете просто вернуть previousValue
.
[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, currentIndex, array) {
if(currentValue === "WHATEVER") {
return previousValue; // Возвращаем предыдущие значение, если текущее равно "WHATEVER"
}
return previousValue + currentValue; // В противном случае суммируем
});
Таким образом, если currentValue
равно "WHATEVER", reduce
просто продолжает с тем же значением previousValue
и игнорирует текущее значение.
Вы можете просто использовать тернарный оператор для передачи предыдущего значения, если условие истинно (true
), или выполнить определенное действие, если оно ложно (false
). Вот пример кода, который демонстрирует это:
[0, 1, 2, 3, 4].reduce((previousValue, currentValue, currentIndex, array) => {
return (condition) ? previousValue : previousValue + currentValue;
});
В этом примере, если условие condition
истинно, функция reduce
будет возвращать предыдущее значение (previousValue
). В противном случае производится сумма предыдущего значения и текущего (previousValue + currentValue
). Это позволяет вам контролировать логику агрегации на основе заданного условия.
В другом варианте можно использовать оператор if
, чтобы разместить вашу логику редукции в этом блоке, игнорируя другие условия.
Например, вместо того чтобы делать это:
let a = sorted.reduce((item, total) => {
if (total + item > k) return total;
ans++;
return total + item;
});
Можно использовать более простой подход:
let a = sorted.reduce((item, total) => {
if (total + item <= k) {
ans++;
return total + item;
}
return total; // Не забудьте вернуть total, если условие не выполняется
});
Этот способ работает идеально и делает код чище и понятнее. Не забывайте, что важно возвращать total
в случае, если условие не выполняется, чтобы избежать ошибок.
Где найти документацию по форматированию даты в JavaScript?
Как определить нажатие клавиши Esc?
Как проверить, содержит ли массив строку в TypeScript?
Ссылка и выполнение внешнего JavaScript-файла, размещенного на GitHub
Как остановить Babel от трансформации 'this' в 'undefined' и добавления "use strict"