reduce() и reduceRight()

Методы reduce() и reduceRight() объединяют элементы массива, используя указанную вами функцию, и возвращают единственное значение. Это типичная операция в функциональном программировании, где она известна также под названием «свертка».

Используется для последовательной обработки каждого элемента массива с сохранением промежуточного результата. ( "свертывание массива" или представить массив одним значением)

Он применяет функцию callback по очереди к каждому элементу массива слева направо, сохраняя при этом промежуточный результат.

Аргументы функции callback(previousValue, currentItem, index, arr):

previousValue - последний результат вызова функции, он же «промежуточный результат».

currentItem - текущий элемент массива, элементы перебираются по очереди слева-направо.

index - номер текущего элемента.

arr - обрабатываемый массив.

Кроме callback, методу можно передать «начальное значение» – аргумент initialValue. Если он есть, то на первом вызове значение previousValue будет равно initialValue, а если у reduce() нет второго аргумента, то оно равно первому элементу массива, а перебор начинается со второго.

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

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

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

console.log( result ); // 15
var a = [1,2,3,4,5]

var sum = a.reduce(function(x,y) { return x+y }, 0); // Сум­ма зна­че­ний
var product = a.reduce(function(x,y) { return x*y }, 1); // Про­из­вед. зна­че­ний
var max = a.reduce(function(x,y) { return (x>y)?x:y; }); // Наи­больш. зна­че­ние

________________________________________________________

Метод reduce() принимает два аргумента.
В первом передается функция, которая выполняет операцию свертки. Задача этой функции – объединить некоторым способом или свернуть два значения в одно и вернуть свернутое значение.
Во втором (необязательном) аргументе передается начальное значение для функции.

Функции, передаваемые методу reduce(), отличаются от функций, передаваемых методам forEach() и map(). Знакомые уже значение, индекс и массив передаются им во втором, третьем и четвертом аргументах. А в первом аргументе передается накопленный результат свертки. При первом вызове в первом аргументе функции передается начальное значение, переданное методу reduce() во втором аргументе. Во всех последующих вызовах передается значение, полученное в результате предыдущего вызова функции.

В первом примере, из приведенных выше, функция свертки сначала будет вызвана с аргументами 0 и 1. Она сложит эти числа и вернет 1. Затем она будет вызвана с аргументами 1 и 2 и вернет 3. Затем она вычислит 3+3=6, затем 6+4=10 и, наконец, 10+5=15. Это последнее значение 15 будет возвращено методом reduce().

Когда метод reduce() вызывается без начального значения, в качестве начального значения используется первый элемент массива. Это означает, что при первом вызове функции свертки будут переданы первый и второй элементы массива.

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

_______________________________________________________

Методы every() и some() являются своеобразной разновидностью операции свертки массива. Однако они отличаются от reduce() тем, что стремятся завершить обход массива как можно раньше и не всегда проверяют значения всех его элементов.

Методы reduce() и reduceRight() могут использоваться не только для математических вычислений.


<<< back

results matching ""

    No results matching ""