Массив дат можно вынести наружу, что
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, но сделает более гибким код.