使用groupby重塑对象 [英] Reshape objects using groupby
本文介绍了使用groupby重塑对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下对象数组:
const data=[
{
"datetime": "2020-01-30T00:59:59.000Z",
"Benzene": 3.6
},
{
"datetime": "2020-01-30T00:59:59.000Z",
"O3": 3.7
},
{
"datetime": "2020-01-30T00:59:59.000Z",
"PM10": 3.1
},
{
"datetime": "2020-03-30T00:59:59.000Z",
"Benzene": 2.6
},
{
"datetime": "2020-03-30T00:59:59.000Z",
"O3": 5.7
},
{
"datetime": "2020-03-30T00:59:59.000Z",
"PM10": 10.5
}
]
我只想按日期分组来重塑它,如下所示:
I want to reshape it by grouping by Date only as follow:
[{ "date":"2020-01-30",
"values":[{"t":"2020-01-30T00:59:59.000Z",
"Benzene":3.6,
"O3":3.7,
"PM10":3.1}]},
{ "date":"2020-03-30",
"values":[{"t":"2020-03-30T00:59:59.000Z",
"Benzene":2.6,
"O3":5.7,
"PM10":10.5}]}]
我想我可以使用Loadash和 .map
完成此操作,但是我不知道如何实现.
I suppose that I can accomplish this using Loadash and .map
, but I can't figure it how.
有什么建议吗?
推荐答案
这可以在 javascript
中完成而无需 lodash
,就像其他答案一样,这是我对reduce的尝试:
This can be done in javascript
without lodash
, like other answers, here is my try with reduce:
var data=[ { "datetime": "2020-01-30T00:59:59.000Z", "Benzene": 3.6 }, { "datetime": "2020-01-30T00:59:59.000Z", "O3": 3.7 }, { "datetime": "2020-01-30T00:59:59.000Z", "PM10": 3.1 }, { "datetime": "2020-03-30T00:59:59.000Z", "Benzene": 2.6 }, { "datetime": "2020-03-30T00:59:59.000Z", "O3": 5.7 }, { "datetime": "2020-03-30T00:59:59.000Z", "PM10": 10.5 }];
var result = Object.values(data.reduce((acc,{datetime, ...rest})=>{
const date = datetime.slice(0,10)
acc[date] = acc[date] || {date, values:[]};
acc[date].values = [{...acc[date].values[0], ...{t:datetime, ...rest}}];
return acc;
},{}));
console.log(result);
这篇关于使用groupby重塑对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文