Search code examples
javascriptarraysjavascript-objectsarray.prototype.map

Get keys of first object in object of arrays


I am trying to get an array of (distinct) keys from an array of objects.

arr =[
   {id: 1, desc: "", name: "", objectives: Array(3), …},
   {id: 2, desc: "", name: "", objectives: Array(3), …},
   {id: 3, desc: "", name: "", objectives: Array(3), …},
   {id: 4, desc: "", name: "", objectives: Array(3), …},
]

Desired output is [id, desc, name, objectives]. I have tried:

Object.keys(arr)[0]
// output [{id: 1, desc: "", name: "", objectives: Array(3), …}]

arr.flatMap(Object.key)
// output ["id", "desc", "name", "objectives", "id", "desc", "name", "objectives", "id", "desc", "name", "objectives", "id", "desc", "name", "objectives"]

I'm sorry if I missed the answer to this when scouring SO. Any help would be really appreciated.


Solution

  • You can use a Set to weed out the duplicates:

    const arr = [
       {id: 1, desc: "", name: "", objectives: []},
       {id: 2, desc: "", name: "", objectives: []},
       {id: 3, desc: "", name: "", objectives: []},
       {id: 4, desc: "", name: "", objectives: []},
    ];
    
    const keys = [...new Set(arr.flatMap(Object.keys))];
    
    console.log(keys);