Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
461 views
in Technique[技术] by (71.8m points)

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

]


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

问题解决

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;
})

思路分析

看了下需求,就是合并数据后再分组

  • 合并数据木有简便方法,只能挨个遍历一下
  • 合并完了之后再进行分组,分组也木有简便方法,只能挨个遍历

如果老是这样遍历的话,在数据量大的时候,时间复杂度就老高老高了.
所以得想办法减少遍历的次数


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...