微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 JavaScript 对象重组为具有命名键的对象数组

如何解决将 JavaScript 对象重组为具有命名键的对象数组

我有以下 JavaScript 对象:

const groupedData = {
  "1":[
    {"x":"2021-02-05","y":1},{"x":"2021-02-05",{"x":"2021-02-06","y":1}
  ],"2":[
    {"x":"2021-02-05",{"x":"2021-02-07",{"x":"2021-02-08","y":1}
  ]
}

我想将每个数组中的对象按 x 分组并按 y 求和,并将数据塑造成稍微不同的结构,以便图表库可以使用它。我有以下功能可以成功进行分组和求和:

const formattedData = [];
Object.keys(groupedData).map((key) => {
  var totals = groupedData[key].reduce(function (r,o) {
    (r[o.x]) ? r[o.x] += o.y : r[o.x] = o.y;
    return r;
  },{});
  formattedData.push({ 'name': key,'data': totals })
});

输出如下:

[
  {
    "name":"1","data": {
      "2021-02-05":2,"2021-02-06":1 
    }
  },{
    "name":"2","data": {
      "2021-02-05":1,"2021-02-06":1,"2021-02-07":3,"2021-02-08":1
    }
  }
]

但是,我希望数据采用以下格式:

[
  {
    "name":"1","data":[
      {"x":"2021-02-05","y":2},"y":1}
    ]
  },"y":3},"y":1}
    ]
  }
]

我正在努力想出一种巧妙的方法来完成格式化的最后一部分。谁能建议如何修改格式化功能以简洁的方式实现最后一步?

非常感谢

解决方法

您可以映射对象的条目并对值进行分组。

const
    data = { 1: [{ x: "2021-02-05",y: 1 },{ x: "2021-02-05",{ x: "2021-02-06",y: 1 }],2: [{ x: "2021-02-05",{ x: "2021-02-07",{ x: "2021-02-08",y: 1 }] },result = Object.entries(data).map(([name,data]) => ({
        name,data: Object.values(data.reduce((r,{ x,y }) => {
            r[x] ??= { x,y: 0 };
            r[x].y += y;
            return r;
        },{}))
    }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。