Задать вопрос
@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 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    JavaScript
    3 месяца
    Далее
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
  • Skypro
    JavaScript-разработчик с нуля
    9 месяцев
    Далее
Решения вопроса 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, но сделает более гибким код.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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