Перейти к основному содержимому
Модуль 6 · Урок 2 из 422/32 в курсе~12 min
Уроки модуля (2/4)

уменьшить

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

Подпись

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc начинается с valoreIniziale.
  • Для каждого элемента вычисляется новый acc.
  • Конечным результатом является последний acc.

Основные примеры: сумма и произведение

JS
const numeri = [3, 1, 4, 1, 5];

const somma = numeri.reduce((a, n) => a + n, 0);
// 14

const prodotto = numeri.reduce((a, n) => a * n, 1);
// 60

Без начального значения reduce начинается с первого элемента (рискованно для потенциально пустых элементов). массивы → ошибка). Всегда передавайте начальное значение, когда можете.

Строительство объекта: подсчет

JS
const parole = ['mela', 'pera', 'mela', 'kiwi', 'mela'];

const conteggio = parole.reduce((acc, p) => {
  acc[p] = (acc[p] ?? 0) + 1;
  return acc;
}, {});
// { mela: 3, pera: 1, kiwi: 1 }

Нахождение макс/мин

JS
const nums = [3, 7, 1, 9, 4];

const max = nums.reduce((a, n) => (n > a ? n : a), -Infinity);
// 9

(На практике для макс/мин лучше использовать Math.max(...nums); это дидактический пример.)

Попробуйте это

Упражнение#js.m6.l2.e1
Попыток: 0Загрузка…

Определите `total(items)`: вы получаете массив объектов {цена, количество} и возвращаете общие расходы (сумма цена*количество). Используйте сокращение.

Загрузка редактора…
Показать подсказку

уменьшить((a, it) => a + it.price * it.quantity, 0)

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#js.m6.l2.e2
Попыток: 0Загрузка…

Определите `count(words)`: учитывая массив строк, верните объект, который сопоставляет каждую строку с количеством вхождений. Используйте сокращение с объектным аккумулятором.

Загрузка редактора…
Показать подсказку

акк[р] = (акк[р] ?? 0) + 1; возврат акк;

Решение доступно после 3 попыток