Вы можете уменьшить ваш массив до объекта, где ключом является deviceId, а значением является объект с deviceId и массивом значений Pressure:
data.reduce(
(result,{deviceId,Pressure})=>{
result[deviceId] = result[deviceId] || {deviceId,Pressure:[]};
result[deviceId].Pressure.push(Pressure);
return result;
},
{}
)
Затем используйте Object.values
, чтобы снова превратить его в массив.
Затем сопоставьте массив с массивом объектов, где Pressure
- одно значение, поэтому уменьшите значения Давления каждого объекта до суммы всех давлений, деленной на длину массива Давлений
valuesWithArrayOfPressure.map(
({deviceId,Pressure})=>({
deviceId,
Pressure:Pressure.reduce((all,item)=>all+item,0)
})
)
Полный код:
var data = [
{
"deviceId": 121,
"Pressure": 120
},
{
"deviceId": 121,
"Pressure": 80
},
{
"deviceId": 130,
"Pressure": 20
},
{
"deviceId": 130,
"Pressure": 25
},
{
"deviceId": 130,
"Pressure": 75
}
];
const valuesWithArrayOfPressure = data.reduce(
(result, { deviceId, Pressure }) => {
result[deviceId] = result[deviceId] || {
deviceId,
Pressure: [],
};
result[deviceId].Pressure.push(Pressure);
return result;
},
{},
);
console.log(
'object where Pressure is grouped',
valuesWithArrayOfPressure,
);
console.log(
'use values and map to get average Pressure values',
Object.values(valuesWithArrayOfPressure).map(
({ deviceId, Pressure }) => ({
deviceId,
Pressure: Pressure.reduce(
(all, item) => all + item,
0,
),
}),
),
);