Задать вопрос
@urajo

Как оптимизировать reduce?

Можно ли как-то сократить код внутри reduce ?
let a =  [
   {
      "code":"CL",
      "tnved10":"7318158100",
      "2019":"33",
      "2020":"0.00",
      "2021":"0.00"
   },
   {
      "code":"CN",
      "tnved10":"7318158100",
      "2019":"7540001.66",
      "2020":"8164813.34",
      "2021":"20980774.64"
   }]
let b = a.reduce((acc, current) => {
  return {
    '2019': Number(acc['2019']) + Number(current['2019']),
    '2020': Number(acc['2020']) + Number(current['2020']),
    '2021': Number(acc['2021']) + Number(current['2021'])
  }
}, {'2019': 0, '2020': 0, '2021': 0});
console.log(b)
  • Вопрос задан
  • 143 просмотра
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик расширенный
    13 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
Решения вопроса 1
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Массив дат можно вынести наружу, что
1) не будет пересоздавать переменную каждый раз.
2) сделает решение более гибким
let a =  [
   {
      "code":"CL",
      "tnved10":"7318158100",
      "2019":"33",
      "2020":"0.00",
      "2021":"0.00"
   },
   {
      "code":"CN",
      "tnved10":"7318158100",
      "2019":"7540001.66",
      "2020":"8164813.34",
      "2021":"20980774.64"
   }]
let b = a.reduce((acc, current) => {
  [2019, 2020, 2021].forEach(i => acc[i] += Number(current[i]))
  return acc
}, {'2019': 0, '2020': 0, '2021': 0});
console.log(b)


Типа так:
const years = [2019, 2020, 2021]
let b = a.reduce((acc, current) => {
  years.forEach(i => acc[i] += Number(current[i]))
  return acc
}, {'2019': 0, '2020': 0, '2021': 0});


Можно ещё сократить, но уже в ущерб читаемости.
Или можно убрать инициализацию начального значения аккумулятора, перенеся проверку ключа на то, что это год внутрь. Правда это несколько увеличит код внутри reduce, но сделает более гибким код.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы