[
{
name: 'A组',
data:[
{date: '2019-08-31', count: 988},
{date: '2019-09-30', count: 823},
{date: '2019-10-31', count: 235},
{date: '2019-11-30', count: 1042},
{date: '2019-12-31', count: 988},
{date: '2020-01-31', count: 823},
{date: '2020-02-29', count: 235},
{date: '2020-03-31', count: 1042},
{date: '2020-04-30', count: 988},
{date: '2020-05-31', count: 823},
{date: '2020-06-30', count: 235},
{date: '2020-07-28', count: 1042}
]
},
{
name: 'B组',
data:[
{date: '2019-08-31', count: 988},
{date: '2019-09-30', count: 823},
{date: '2019-10-31', count: 235},
{date: '2019-11-30', count: 1042},
{date: '2019-12-31', count: 988},
{date: '2020-01-31', count: 823},
{date: '2020-02-29', count: 235},
{date: '2020-03-31', count: 1042},
{date: '2020-04-30', count: 988},
{date: '2020-05-31', count: 823},
{date: '2020-06-30', count: 235},
{date: '2020-07-28', count: 1042}
]
},
{
name: 'C组',
data:[
{date: '2019-08-31', count: 988},
{date: '2019-09-30', count: 823},
{date: '2019-10-31', count: 235},
{date: '2019-11-30', count: 1042},
{date: '2019-12-31', count: 988},
{date: '2020-01-31', count: 823},
{date: '2020-02-29', count: 235},
{date: '2020-03-31', count: 1042},
{date: '2020-04-30', count: 988},
{date: '2020-05-31', count: 823},
{date: '2020-06-30', count: 235},
{date: '2020-07-28', count: 1042}
]
},
{
name: 'D组',
data:[
{date: '2019-08-31', count: 988},
{date: '2019-09-30', count: 823},
{date: '2019-10-31', count: 235},
{date: '2019-11-30', count: 1042},
{date: '2019-12-31', count: 988},
{date: '2020-01-31', count: 823},
{date: '2020-02-29', count: 235},
{date: '2020-03-31', count: 1042},
{date: '2020-04-30', count: 988},
{date: '2020-05-31', count: 823},
{date: '2020-06-30', count: 235},
{date: '2020-07-28', count: 1042}
]
}
]
上面的数据 怎么转换为这样的一维数组数据
[
{date: '2019-08-31', 'A组': 988, 'B组': 988, 'C组': 988, 'D组': 988},
{date: '2019-09-30', 'A组': 823, 'B组': 823, 'C组': 823, 'D组': 823},
{date: '2019-10-31', 'A组': 235, 'B组': 235, 'C组': 235,'D组': 235},
{date: '2019-11-30', 'A组': 1042, 'B组': 1042, 'C组': 1042, 'D组': 1042},
{date: '2019-12-31', 'A组': 988, 'B组': 988,'C组': 235,'D组': 235},
{date: '2020-01-31', 'A组': 823, 'B组': 235,'C组': 235,'D组': 235},
.
.
.
]
###问题解决
const hash = {};
// 这里的originList是你的原始数据
originList.forEach(ele => {
const { name } = ele;
ele.data.forEach(item => {
const { date } = item;
hash[date] || (hash[date] = {});
hash[date][name] = item.count;
})
});
// 其实到这一步使用hash就已经可以了,后面的可能省略掉
const resrult = Object.entries(hash).map(([key, value]) => {
value.date = key;
return value;
})
思路分析
看了下需求,就是合并数据后再分组
- 合并数据木有简便方法,只能挨个遍历一下
- 合并完了之后再进行分组,分组也木有简便方法,只能挨个遍历
如果老是这样遍历的话,在数据量大的时候,时间复杂度就老高老高了.
所以得想办法减少遍历的次数
一个简单的方法:
大致思路就是使用一个 Map(就用 Object 也可以) 来中转数据。
Map 的 key 采用 date 的值,然后 value 中存储 A组 B组 等各种字段所构成的一个 Object。
遍历所有的数据,填充到对应的 Map item 中,最后遍历整个 Map,拼接成你想要的这种数据即可。
Map 的大致结构如下:
{
[date1]: {
[A组]: XXX,
[B组]: XXX,
...
},
[date2]: {
[A组]: XXX,
[B组]: XXX,
...
},
...
}