@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)
  • Вопрос задан
  • 132 просмотра
Решения вопроса 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, но сделает более гибким код.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы