Найти в Дзене
Степан Скворцов

Как написать лучший код JavaScript с помощью "forEach" и "reduce".

В этой статье мы возьмем небольшую проблему и попытаемся написать элегантный JavaScript для решения этой проблемы. Идея заключается в том, чтобы писать небольшие многократно используемые функции и использовать такие языковые конструкции, как forEach и reduce, для решения проблем.

Постановка проблемы:

У нас есть массив объектов. Каждый объект представляет человека с его доходами и расходами, и мы хотим найти человека с наибольшими сбережениями.

В приведенном выше примере Алиса имеет доход 50000, а ее расходы равны (8000 + 2000 + 4500 ) = 14500. поэтому ее сбережения равны 35500.

Боб имеет доход 45000, а его расходы равны ( 7000 + 3000 ) =10000. поэтому его сбережения равны 35000. Это означает, что Алиса экономит больше, чем Боб, и наша программа должна вывести в качестве ответа Алису.

Функция для нахождения общих расходов

Расходы - это объект, который может иметь несколько различных значений. Здесь у Алисы три разных расхода, а у Боба только два расхода. Мы хотим написать функцию для суммирования значений объекта расходов.

Object.values(obj) возвращает массив значений в объекте расходов.

для Алисы возвращает [8000,2000,4500].

для Боба возвращает [7000,3000].

Затем к этому массиву расходов цепочкой применяем функцию reduce и находим сумму всех расходов.

Для Алисы функция total_expenditure вернет 14500, а для Боба - 10000.

Функция для поиска сбережений

Теперь мы напишем еще одну функцию "find_savings", которая вычитает расходы из доходов человека. Она принимает данные о человеке в качестве входных данных и возвращает сбережения этого человека.

Для Алисы она возвращает 50000 -14500 = 35500, а для Боба - 45000 -10000 = 35000.

Поиск человека с наибольшими сбережениями

Теперь мы хотим сравнить и найти человека с наибольшими сбережениями. Поэтому мы начнем с ответа {savings: -1}. Затем мы используем цикл forEach для перебора всех людей, и если у кого-то сбережения больше, чем у того, с кем мы столкнулись ранее, мы обновляем сбережения и имя этого человека в нашем объекте ответа.

И, наконец, мы выводим answer.name как наше решение.✌️

Что вы узнали из этого примера:

Использование подхода "снизу вверх" для решения проблем

Мы решили проблему, используя подход "снизу вверх". Мы хотели найти человека с наибольшими сбережениями. Для этого нам нужно найти сбережения каждого человека, а для нахождения сбережений нам нужно найти общие расходы. поэтому мы начали с нахождения общих расходов, затем нашли сбережения каждого человека, а затем сравнили сбережения.

Используйте функции более высокого порядка, такие как forEach и reduce.

Использование функций более высокого порядка, таких как map, reduce, forEach и т. д., имеет два преимущества. Во-первых, нам не нужно беспокоиться о том, что индекс нашего массива выйдет за границы. Во-вторых, они более читабельны. Когда вы используете reduce, например, читатель поймет ваше намерение. Но если вы используете ванильный цикл for, это не очень удобно для чтения.

Надеюсь, вам понравилось читать эту статью. Для получения новых советов и рекомендаций, подписывайтесь на меня, чтобы получать уведомления о новых статьях. 🥰