Search code examples
javascriptarraysjavascript-objectsreduce

Removing duplicate keys from object array


I have an array of objects like this

let array = [
  {
    sector: "adad"
  },
  {
    sector: "adadasdsd"
  },
  {
    sector: "sdsdsd"
  },
  {
    origin: "sdfsf"
  },
  {
    destination: "dfsfsdf"
  }
];

I want it to be like this:

let array = [
  { sector: ["adad", "adadasdsd", "sdsdsd"] },
  { origin: ["sdfsf"] },
  { destination: ["dfsfsdf"] }
];

Let me know how this can be achieved. I know reduce will help me out. However I am stuck on how to proceed on that? Any help?


Solution

  • You could take a hash table for collecting values of same keys and map later to single key/value pairs.

    let array = [{ sector: "adad" }, { sector: "adadasdsd" }, { sector: "sdsdsd" }, { origin: "sdfsf" }, { destination: "dfsfsdf" }],
        grouped = Object
            .entries(array.reduce(
                (r, o) => (
                    Object.entries(o).forEach(([k, v]) => (r[k] = r[k] || []).push(v)),
                    r
                ),
                Object.create(null)
            ))
            .map(([k, v]) => ({ [k]: v }));
       
    console.log(grouped);