【问题标题】:Aggregating array of object per category for big dataset为大数据集聚合每个类别的对象数组
【发布时间】:2023-02-08 00:14:35
【问题描述】:

我正在尝试为图表准备数据,但我的图书馆希望每个对象都处于聚合级别。有时可能需要将 1000 多个对象处理成一个聚合级别,因此我试图找到一个相当高效的解决方案(Javascript 中的性能..)。我想在月级汇总并创建一个对象 - 但我的数据是在日级。

我的阵列现在看起来像什么:

const data = [
  {
    name: "1 Jan 2022",
    uv: 2000,
    pv: 400,
 
  },
 {
    name: "3 Jan 2022",
    uv: 1000,
    pv: 1500,
 
  },
 {
    name: "4 Jan 2022",
    uv: 1000,
    pv: 500,
 
  },
..........x 100 similar entries...  
]

目标数组:

const data = [
  {
    name: "Jan 2022",
    uv: 4000,
    pv: 2400,
 
  },
  {
    name: "Feb 2022",
    uv: 3000,
    pv: 1398,
  
  },
  {
    name: "Mar 2022",
    uv: 2000,
    pv: 9800,

  }
 ]

关于最佳实践的任何想法?

【问题讨论】:

    标签: javascript node.js arrays sorting recharts


    【解决方案1】:

    const data = [{"name":"1 Jan 2022","uv":2000,"pv":400},{"name":"3 Jan 2022","uv":1000,"pv":1500},{"name":"4 Jan 2022","uv":1000,"pv":500}]
    
    console.log(Object.values(data.reduce((a,{name,uv,pv},t)=>(
        t=name.substring(name.indexOf(' ')+1), 
        t=a[t]??={name:t,uv:0,pv:0},
        t.uv+=uv, t.pv+=pv,
      a), {})))

    【讨论】:

      【解决方案2】:

      尝试使用减少:

      const data = [
        {
          name: "1 Jan 2022",
          uv: 2000,
          pv: 400,
       
        },
       {
          name: "3 Jan 2022",
          uv: 1000,
          pv: 1500,
       
        },
       {
          name: "4 Jan 2022",
          uv: 1000,
          pv: 500,
       
        },{
          name: "3 Feb 2022",
          uv: 1000,
          pv: 1500,
       
        },
       {
          name: "4 Feb 2022",
          uv: 60,
          pv: 500,
       
        },
       {
          name: "4 Feb 2023",
          uv: 60,
          pv: 500,
       
        }
       ]
        
       const result = Object.values(data.reduce((acc, item) => {
        const dt = item.name.split(" ");
        const month = dt[1] + ' ' + dt[2];
         if(!acc[month]){
           acc[month] = {
             name: month,
             pv: item.pv,
             uv: item.uv
           }
           return acc;
        }
           acc[month] = {
           name: month,
             pv: acc[month].pv += item.pv,
             uv: acc[month].uv += item.uv,
           }
        return acc;
       }, {}))
       
       console.log(result)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-29
        • 2019-06-10
        • 1970-01-01
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-12
        相关资源
        最近更新 更多