简体   繁体   中英

go from array of objects to objects of array

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

an array of objects ==> an object of arrays.

  var data2 = {
      id: [],
      time: [],
      rssi: []
    };

This is how im doing it now:

    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)
    }

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM