Я запутался, чтобы объединить содержимое массива из JavaScript. Пожалуйста, помогите получить лучший способ получить желаемый результат. Я также пробовал другие способы, указанные на SO.
[
{
"Afghanistan": 2646432,
"categories": "2018"
},
{
"Afghanistan": 6545700,
"categories": "2019"
},
{
"Afghanistan": 7475886,
"categories": "2020"
},
{
"Albania": 740232,
"categories": "2018"
},
{
"Albania": 2374785,
"categories": "2019"
},
{
"Albania": 2180850,
"categories": "2020"
}
]
Это был мой ожидаемый результат::
[ { "Afghanistan": 2646432, "Albania": 740232, "categories": "2018" }, { "Afghanistan": 6545700, "Albania": 2374785, "categories": "2019" }, { "Afghanistan": 7475886, "Albania": 2180850, "categories": "2020" } ]
array.reduce((acc, item) => {
const found = acc.find(obj => obj.categories === item.categories);
if (found) {
Object.assign(found, item);
} else {
acc.push(item);
}
return acc;
}, [])
let list=[{Afghanistan:2646432,categories:"2018"},{Afghanistan:6545700,categories:"2019"},{Afghanistan:7475886,categories:"2020"},{Albania:740232,categories:"2018"},{Albania:2374785,categories:"2019"},{Albania:2180850,categories:"2020"},{India:2029282726,categories:"2022"},{India:2029282729,categories:"2023"},{Afghanistan:2029282729,categories:"2023"}];
let result = Object.values(list.reduce((acc, cur) => (acc[cur.categories] ? acc[cur.categories] = {...acc[cur.categories], ...cur} : acc[cur.categories] = cur, acc), {}));
console.info(result);
Вы можете использовать метод уменьшить