Задать вопрос
@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)
  • Вопрос задан
  • 135 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillbox
    JavaScript
    3 месяца
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 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, но сделает более гибким код.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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