I have “available” data and want to convert it into “desired”.
I tried to merge all objects inside array using this but its not working coz as you can see for timestamp = 10 we have 2 values of sw_version
const available = [
{
"timestamp": 10,
"sw_version": "AA"
},
{
"timestamp": 10,
"sw_version": "AB"
},
{
"timestamp": 20,
"sw_version": "QFX-1.2.5 B"
},
{
"timestamp": 10,
"pressure": 14.75
},
{
"timestamp": 20,
"pressure": 14.22
},
{
"timestamp": 10,
"temperature": 15.96
},
{
"timestamp": 20,
"temperature": 38.50
}
]
const desired = [
{
"timestamp": 10,
"sw_version": "AA",
"pressure": 14.75,
"temperature": 15.96
},
{
"timestamp": 10,
"sw_version": "AB",
"pressure": 14.75,
"temperature": 15.96
},
{
"timestamp": 20,
"sw_version": "QFX-1.2.5 B",
"pressure": 14.22,
"temperature": 38.5
}
]
I am new to javascript and i tried below function
const output = available.reduce((result, item) => {
const i = result.findIndex((resultItem) => resultItem.timestamp === item.timestamp);
if (i === -1) {
result.push(item);
} else {
result[i] = { ...result[i], ...item };
}
return result;
}, []);
The output was
[
{
"timestamp": 10,
"sw_version": "AB",
"pressure": 14.75,
"temperature": 15.96
},
{
"timestamp": 20,
"sw_version": "QFX-1.2.5 B",
"pressure": 14.22,
"temperature": 38.5
}
]
As you can see in the desired output i want 2 objects with timestamp = 10 but in the function output its is overwriting the first one and keeping only one object