# Метод reduce

Метод `reduce` сворачивает массив к одному значению (редуцирует). К примеру, с помощью этого метода можно легко найти сумму элементов массива (то есть массив сведется к одному значению - к сумме элементов).

Первым параметром метод `reduce` получает функцию, которая последовательно выполнится для каждого элемента массива, начиная с первого. В эту функцию можно передавать `4` параметра. Если эти параметры есть (они не обязательны), то в первый автоматически попадет промежуточный результат, во второй попадет элемент массива, в третий - его номер в массиве (индекс), а в четвертый - сам массив.

Промежуточный результат - это переменная, в которой будет накапливаться то значение, которое вернет метод `reduce`, когда переберет все элементы массива. К примеру, туда последовательно можно накапливать сумму элементов массива: сначала положить первый элемент, при следующем проходе цикла уже сумму первого элемента и второго, при следующем проходе - сумму первого, второго и третьего. И так, пока массив не закончится. Функция, которую принимает `reduce`, должна возвращать новое значение промежуточного результата.

Вторым параметром метода `reduce` указывается начальное значение промежуточного результата. Если его не указать, то оно будет равно первому элементу массива, а обработка элементов начнется со второго элемента.

## Синтаксис

`массив.reduce(function(промежуточный результат, элемент, индекс, массив) { return новый промежуточный результат; }, начальное значение);`

## Пример

Найдем сумму элементов массива:

`let arr = [1, 2, 3, 4, 5, 6]; let res = arr.reduce(function(sum, elem) { return sum + elem; }, 0); console.log(res);`

Результат выполнения кода:

`21`

## Пример

Давайте найдем сумму всех положительных чисел массива:

`let arr = [1, -2, -3, 4, 5, -6]; let res = arr.reduce(function(sum, elem) { if (elem >= 0) { return sum + elem; } else { return sum; } }, 0); console.log(res);`

Результат выполнения кода:

`10`

## Смотрите также

- метод `reduceRight`,
  выполняющий похожую операцию
- метод `filter`,
  который позволяет фильтровать элементы массива
- методы `map` и `forEach`,
  которые позволяют применить функцию к каждому элементу массива
- методы `some` и `every`,
  выполняющие проверку массива

← →
↑
en ru