Задать вопрос
@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 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Академия Eduson
    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, но сделает более гибким код.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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