我有来自API的响应文本如下,我想将它们聚合为新格式的响应.但这很困难,请帮助我(使用JavaScript)

Response from API:

[
  {
    sumTime: "2024-04-25 12:00:00",
    equipParaName: "P1",
    sumValue: 5
  },
  {
    sumTime: "2024-04-25 05:00:00",
    equipParaName: "P2",
    sumValue: 10,
  },
  {
    sumTime: "2024-04-25 09:00:00",
    equipParaName: "P1",
    sumValue: 8
  },
  {
    sumTime: "2024-04-25 08:00:00",
    equipParaName: "P2",
    sumValue: 3,
  },
  {
    sumTime: "2024-04-25 08:00:00",
    equipParaName: "P3",
    sumValue: 12,
  }
]

Conditions:

  • 同样的sumTimeequipParaName就无法复制

  • 如果有3个唯一的equipParaName,则预期结果在一个对象中最多有3个属于它们的属性

  • 结果列表中的相同equipParaName必须由sumTime ASC订购

    equipParaName: P1, sumTime: 2024-04-25 12:00:00, sumValue: 5
    equipParaName: P1, sumTime: 2024-04-25 09:00:00, sumValue: 8
    ==> The sumTime 2024-04-25 09:00:00 should be added to 1st object and sumTime: 2024-04-25 12:00:00 added to 2nd object in result list
    

Expect:

[
  {
    index: 1,
    P1: 8,
    P1_sumTime: "2024-04-25 09:00:00",
    P2: 10,
    P2_sumTime: "2024-04-25 05:00:00",
    P3: 12,
    P3_sumTime: "2024-04-25 07:00:00"
  },
  {
    index: 2,
    P1: 5,
    P1_sumTime: "2024-04-25 12:00:00",
    P2: 3,
    P2_sumTime: "2024-04-25 08:00:00"
  }
]

推荐答案

  1. equipParaName对项目进行分组并按sumTime排序
  2. 将项目收集到最后一组对象中,以便对象中只有唯一的equipParaName个.

const input=[{sumTime:"2024-04-25 12:00:00",equipParaName:"P1",sumValue:5},{sumTime:"2024-04-25 05:00:00",equipParaName:"P2",sumValue:10},{sumTime:"2024-04-25 09:00:00",equipParaName:"P1",sumValue:8},{sumTime:"2024-04-25 08:00:00",equipParaName:"P2",sumValue:3},{sumTime:"2024-04-25 08:00:00",equipParaName:"P3",sumValue:12}];

const ps = input.reduce((r, item) => ((r[item.equipParaName] ??= []).push(item), r), {});
const result = Array.from({length: Math.max(...Object.values(ps).map(arr => arr.length))}, (_, i) => ({index:i+1}));
Object.keys(ps).sort().forEach(key => 
   ps[key].sort((a,b) => (a = a.sumTime, b = b.sumTime, a > b ? 1 : a < b ? -1 : 0))
    .forEach(({sumTime, sumValue}, i) => (result[i][key] = sumValue, result[i][key + '_sumTime'] = sumTime))
);

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

Javascript相关问答推荐

react 页面更改类别时如何返回第0页

为什么在react js中没有调用加载器函数?

我的YouTube视频没有以html形式显示,以获取免费加密信号

如何让\w token 在此RegEx中表现得不贪婪?

JS生成具有给定数字和幻灯片计数的数组子集

如何判断属于多个元素的属性是否具有多个值之一

如何在表格上拥有水平滚动条,在正文页面上拥有垂直滚动条,同时还对html表格的标题使用位置粘性?

按钮未放置在html dis位置

MongoDB中的引用

未定义引用错误:未定义&Quot;而不是&Quot;ReferenceError:在初始化&Quot;之前无法访问';a';

当id匹配时对属性值求和并使用JavaScript返回结果

检索相加到点的子项

在Reaction中的handleSubmit按钮内,useSelector值仍然为空

在css中放置所需 colored颜色 以填充图像的透明区域

使用auth.js保护API路由的Next.JS,FETCH()不起作用

Jest toHaveBeenNthCalledWith返回当前设置的变量值,而不是调用时的值

在画布中调整边上反弹框的大小失败

使每个<;li>;元素的 colored颜色 与随机生成的 colored颜色 列表不同(不重复

Phaser3 preFX addGlow不支持zoom

将延迟加载的模块转换为Eager 加载的模块