JavaScript Array имеет отличный метод уменьшить ()
Это может делать удивительные преобразования с массивами, например, выравнивание или преобразование в другие типы данных. Этот метод запускает и выполняет предоставленную функцию по каждому значению массива и выводит одно значение. В этой статье я хотел бы поделиться несколькими примерами того, как использовать ее в разных случаях.
Структура метода
Метод принимает обратный вызов и начальное значение. Обратный вызов берет четыре аргумента:
- аккумулятор – накапливает возвращаемое значение
- Значение – текущее значение это обрабатывается
- Индекс – индекс текущего элемента (необязательно)
- массив – исходный массив (необязательно)
Array.prototype.reduce(function(acc, value, ?index, ?array), ?initialValue)
Начальное значение необязательно. Если он не предоставлен, обратный вызов займет первый элемент массива и использует его в качестве начального значения. Если первоначальное значение поставляется, против него будут выполняться следующие элементы массива, накапливать новые результаты, и вы должны убедиться, что вы вернете его из функции.
Кроме того, мне нужно упомянуть, что запуск редуктора на пустом массиве приведет к брошению ошибки. Всегда проверяйте и убедитесь, что у массива есть хотя бы один элемент.
Сценарии использования
Ниже вы найдете три примера, как вы можете уменьшить и преобразовать массивы для вашей выгоды.
Вернуть сумму значений
Если у вас есть множество чисел, легко получить их сумму.
[1, 2, 3].reduce((acc, value) => acc + value); // output 6
Нам не нужно указывать начальное значение. Функция редуктора займет первый элемент 1
и используйте его в качестве начального значения, чтобы накапливать и вернуть новый результат. С функцией стрелки вам не нужно указывать оператор возврата. Новый результат будет возвращен по умолчанию.
Вернуть подсчет экземпляров
Групповые значения и возражают, чтобы узнать, сколько раз значение повторяется в массиве:
['a', 'b', 'a', 'c', 'b'].reduce((acc, value) => acc[value] ? { ...acc, [value]: acc[value]++ } : { ...acc, [value]: 1 }, {}) // output { a: 2, b: 2, c: 1 }
Здесь мы указали начальное значение как объект и на каждую итерацию элемента массивов, выполняя проверку, существует ли значение в объекте. Если это так, мы возвращаем объект с предыдущими значениями ( ... ACC
) и увеличенное значение [val]: acc [val] ++
Анкет
Сплющенные массивы
Если у вас есть массив массивов, вы можете легко сгладить значения и уменьшить до одного массива значений с помощью Little Roying:
[['a', 'b'], ['c'], ['d', 'e']].reduce((acc, value) => [...acc, ...value], []); // output [ "a", "b", "c", "d", "e" ]
Суммировать
уменьшить ()
Метод убедительный и гибкий, может объединить различные методы массива, такие как map ()
и Filter ()
Анкет Выполните математическую операцию или запустите асинхронный код в последовательности. И поскольку он гибкий, есть больше места для ошибок. При объединении нескольких методов и процессов в один трудно понять намерение и отлаживать его.
Оригинал: “https://dev.to/spukas/array-transformations-with-reduce-method-2jm5”