Блог

Массивы Google Apps Script и JavaScript. Метод .reduce()

Краткое описание метода

Метод .reduce() как и большинство других методов, использующих callback функцию, представляет собой цикл for, внутри которого callback функция последовательно обрабатывает все элементы массива. Однако, следует добавить, что что это единственный метод, который используе ещё один параметр - accumulator (аккумулятор), блягодаря чему метод .reduce() часто используется для вычислений суммы массива.

Метод .reduce() может передавать в callback функцию 4 параметра:

  1. текщее значение суммы элемента массива accumulator
  2. текщее значение элемента массива item
  3. необязательный параметр index - индекс текущего элемента
  4. необязательный и редко используемый параметр array

Этот метод может быть использован и для более сложных вычислений. Например, ниже приводится скрипт, который создаёт массив индексов элементов массива arr, представлящих собой нечётные числа.

const arr = [1, 2, 3, 4, 5];
  
// sum with for loop
  let sumArr = 0;
  for (let i = 0; i < arr.length; i++) {
    sumArr += arr[i];
  };
  console.log(sumArr);
  
// sum with forEach method
  let sumArr_1 = 0;
  arr.forEach(item => sumArr_1 += item);
  console.log(sumArr_1);
  
// sum with reduce method
  let sumArr_2 = arr.reduce((acc, item) => acc + item, 0);
  console.log(sumArr_2);
  
// with initial value
  sumArr_2 = arr.reduce((acc, item, index, array) => {
    console.log(`acc = ${acc}, item = ${item}, index = ${index}`);
    return acc + item;
  }, 0);
  console.log(sumArr_2);
  
// without initial value
  sumArr_2 = arr.reduce((acc, item, index, array) => {
    console.log(`acc = ${acc}, item = ${item}, index = ${index}`);
    return acc + item;
  });
  console.log(sumArr_2);
  
// find indexes items that are odd numbers  
  let newArr = arr.reduce((acc, item, index) => {
    if (item % 2 !== 0) acc.push(index);
    return acc;
  }, []);
  console.log(newArr); // [ 0, 2, 4 ]
  
 // reduceRight
  sumArr_2 = arr.reduceRight((acc, item, index, array) => {
    console.log(`acc = ${acc}, item = ${item}, index = ${index}`);
    return acc + item;
  });
  console.log(sumArr_2);

Дополнительную информацию вы можете найти в этом видео: