0

Как пропустить итерацию при использовании reduce в JavaScript?

13

Я пытаюсь разобраться, как условно прервать итерацию при использовании функции 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 ответ(ов)

1

Вы можете просто вернуть 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 и игнорирует текущее значение.

0

Вы можете просто использовать тернарный оператор для передачи предыдущего значения, если условие истинно (true), или выполнить определенное действие, если оно ложно (false). Вот пример кода, который демонстрирует это:

[0, 1, 2, 3, 4].reduce((previousValue, currentValue, currentIndex, array) => {
  return (condition) ? previousValue : previousValue + currentValue;
});

В этом примере, если условие condition истинно, функция reduce будет возвращать предыдущее значение (previousValue). В противном случае производится сумма предыдущего значения и текущего (previousValue + currentValue). Это позволяет вам контролировать логику агрегации на основе заданного условия.

0

В другом варианте можно использовать оператор 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 в случае, если условие не выполняется, чтобы избежать ошибок.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь