ES5 и более поздние версии JavaScript принесли несколько новых методов для обработки массивов. Многие из них стали лучшими практикой для общих задач с массивами и JavaScript намного лучше с ними.
Array.map () и Array.filter () Есть два примера ежедневных добавок ES5 Driver ES5, которые являются скобами для большинства разработчиков JS.
Одинаково полезный, но часто менее понятый инструмент в комплекте Array.reduce () Отказ В последнее время я использовал Уменьшить Чаще, но потребовалось некоторое время, чтобы почувствовать естественное, и я часто вижу, как другие разработчики, борющиеся с ним … или просто не используете его вообще.
Уменьшить часто учил не так и, следовательно, неправильно понял
На мой взгляд, большая причина путаницы в том, что Уменьшить только что учил не так. На самом деле, это даже чувствует назван Неправильно для меня (хотя, конечно, концепция и имя редуктора приходят из колодца до того, как он был добавлен в JavaScript).
Наиболее распространенным примером при обучении редукторов является чем-то подобное:
const array = [1, 2, 3, 4];
const sum = array.reduce((accumulator, currentItem) => {
return accumulator + currentItem;
}, 0);
// sum = 10
Это довольно чисто показывает, как функция редукторов. Вы звоните Уменьшить () На массиве и пропустите его начальное значение, а также функцию, которая запускается для каждого элемента этого массива.
Пропущенной функции, Уменьшить Отправляет:
1) Текущий предмет и 2) Значение, возвращаемое предыдущим обратным вызовом (или исходным состоянием, при вызове в первый раз)
Окончательная стоимость Уменьшить в конечном счете, независимо от внутреннего редуктора возвращается при выношении в последний раз.
В результате в этом случае редуктор сводится к значениям массива и возвращает общее значение.
Итак … Добавление массивов чисел, это то, что все уменьшается?
Я видел этот пример так много раз, но редко видел объяснения, которые стали намного дальше.
“Хм, интересно”. Я бы подумал, как я продолжал с моим днем.
Итак, какая реальная сделка с редукторами? Для чего они на самом деле хорошо?
Вот реальная сила:
Редукторы полезны, когда вы хотите обработать массив, но выведите то, что не является массивом
Это действительно то, к чему это сводится к, и это полезно Очень часто Отказ
Ведь не то, что мы делаем в примере выше? Мы принимаем в массиве и возвращая целое число. В этом контексте это имеет некоторое смысл, что мы «уменьшаем» массив, но нам не всегда нужно что-то выводить так просто, как целое число.
Возьми этот пример:
const trips = [{type: 'car', dist: 42}, {type: 'foot', dist: 3}, {type:'flight', dist: 212}, {type: 'car', dist: 90}, {type: 'foot', dist: 7}]
const distanceByType = trip.reduce((out, curr) => {
const { type, dist } = curr;
if (out[type]) {
out[type] += dist;
} else {
out[type] = dist;
}
return out;
}, {});
// distanceByType = {car: 132, foot: 10, flight: 212};
Итак, здесь мы принимаем в массиве, но возвращая объект сумм, а не только одного.
Здесь мы начинаем видеть сущность того, что действительно редуктор:
Редуктор – это трансформатор
Это берет в массиве и превращает его в что-то еще.
Думаю об этом таким образом не только помогает мне понять, что Уменьшить делает, но и помогает мне понять, когда я должен использовать его .
Иметь массив пользователей, но хочу выводить строку, как,
Майк, Бека и 3 других будет посещать? Редуктор отлично подходит для этого!Имейте массив статей и хотите, чтобы объект с ними ключи от категории? Редуктор отлично подходит для этого!
Использовать случаи продолжаются и включены.
Я действительно надеюсь, что поможет и понравится уточнить вещи дальше в комментариях, если смогу.
Получил использование для Уменьшить Что ты любишь? Комментарий ниже, и я добавлю его в статью 🚀
Оригинал: “https://dev.to/nickyhajal/demystifying-arrayreduce-how-to-understand-it-and-when-to-use-it-in-your-code-5b96”