js如何将二维对象数组生成一维对象数据

[

{
    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},
.
.
.

]

阅读 2.4k
2 个回答

问题解决

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,
    ...
  },
  ...
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题