重新构造对象数组

f45qwnt8  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(339)

我目前有一个如下所示的对象数组:

[{day:"Monday", Country:"America", cases:200},
{day:"Monday", Country:"India", cases:120},
{day:"Monday", Country:"Germany", cases:20},
{day:"Tuesday", Country:"America", cases:210},
{day:"Tuesday", Country:"India", cases:110},
{day:"Tuesday", Country:"Germany", cases:35},
{day:"Wednesday", Country:"America", cases:250},
{day:"Wednesday", Country:"India", cases:150},
{day:"Wednesday", Country:"Germany", cases:50}]

我正试图找出最好的方法来重组这些数据,使其看起来像这样:

[{day:"Monday", "America":200, "India":120, "Germany":20},    
 {day:"Tuesday", "America":210, "India":110, "Germany":35},    
 {day:"Wednesday", "America":250, "India":150, "Germany":50}]

有没有人能提供一些建议,以及重构javascript对象的好资源?

1qczuiv0

1qczuiv01#

我们可以使用array.reduce按天,然后按国家创建案例摘要。
我们从创建案例Map开始,键入 day ,然后我们使用object.values将此Map转换为数组。
我建议,无论何时您希望重新构造阵列,请查看array.map、array.filter和array.reduce,这些都是更改阵列结构的强大方法。

const arr = [{day:"Monday", Country:"America", cases:200}, {day:"Monday", Country:"India", cases:120}, {day:"Monday", Country:"Germany", cases:20}, {day:"Tuesday", Country:"America", cases:210}, {day:"Tuesday", Country:"India", cases:110}, {day:"Tuesday", Country:"Germany", cases:35}, {day:"Wednesday", Country:"America", cases:250}, {day:"Wednesday", Country:"India", cases:150}, {day:"Wednesday", Country:"Germany", cases:50}];

const result = Object.values(arr.reduce((acc, cur) => {
    // Create the summary for the day if it doesn't exist
    acc[cur.day] = acc[cur.day] || { day: cur.day};
    // Create the summary for the country if it doesn't exist and add the cases in cur
    acc[cur.day][cur.Country] = (acc[cur.day][cur.Country] || 0) + cur.cases;
    return acc;
}, {}))

console.log('Result:',result)

相关问题