Reputation: 67
Incoming Data
Node is an Array of Objects
{
"db": {
"testing new apip": { "node": [] },
"testing new apip 5": {
"node": [
{
"id": "testing new id",
"time": 1571679839.6459858,
"rssi": "testing new rssi"
},
{
"id": "testing new id 5",
"time": 1571679845.8376184,
"rssi": "testing new rssi"
},
{
"id": "testing new id 55",
"time": 1571679851.4211318,
"rssi": "testing new rssi"
}
]
},
"testing new apip 52": {
"node": [
{
"id": "testing new id 556",
"time": 1571679859.927497,
"rssi": "testing new rssi"
}
]
}
}
}
I would like to know if there is a shortcut to appending to an array without using a for loop.
Basically I want to know what is the fastest way to convert
var data2 = {
id: [],
time: [],
rssi: []
};
for (i = 0; i < data.db[AP[0]].node.length; i++) {
data2.id.push(data.db[AP[0]].node[0].id)
data2.time.push(data.db[AP[0]].node[0].time)
data2.rssi.push(data.db[AP[0]].node[0].rssi)
}
Upvotes: 1
Views: 56
Reputation: 6641
One approach is to use reduce().
// Array of objects.
let node = [{ "id": "testing new id", "time": 1571679839.6459858, "rssi": "testing new rssi" }, { "id": "testing new id 5", "time": 1571679845.8376184, "rssi": "testing new rssi" }, { "id": "testing new id 55", "time": 1571679851.4211318, "rssi": "testing new rssi" } ];
let result = node.reduce((acc, curr) => {
Object.entries(curr).forEach(([key, value]) => {
acc[key] = acc[key] || [];
acc[key].push(value);
});
return acc;
}, {});
// Object of arrays.
console.log(result);
Upvotes: 2