У меня есть текст ответа от API, как показано ниже, я хочу объединить их в ответ нового формата. Но это довольно сложно, пожалуйста, помогите мне (используя JavaScript)
Ответ от 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,
}
]
Условия:
При том же 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
Ожидать:
[
{
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"
}
]
я думаю, ваш P3 в первом элементе вывода содержит недопустимое sumTime



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


equipParaName и сортировать по sumTimeequipParaName.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.info(result);.as-console-wrapper{
max-height:100% !important;
}
вы забыли раздел под названием «код, который я пробовал»: p вы также не раскрываете, откуда берется значение
index