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

Первым параметром метод reduce получает функцию, которая последовательно выполнится для каждого элемента массива, начиная с первого.

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

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

Функция, которую принимает reduce, должна возвращать новое значение промежуточного результата.

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

Очень сложно все выглядит - посмотрите примеры ниже, там будет более понятно.

См. также forEach, filter, map, some, every, reduceRight.

Синтаксис

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

Примеры

Пример

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

var arr = [1, 2, 3, 4, 5, 6];

var result = arr.reduce(function(sum, elem) {
	return sum + elem;
}, 0);

document.write(result);

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

21

Пример

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

var arr = [1, -2, -3, 4, 5, -6];

var result = arr.reduce(function(sum, elem) {
	if (elem >= 0) {
		return sum + elem;
	} else {
		return sum;
	}
});

document.write(result);

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

10