1

Want to modify below array:

let data = [
  { name: 'Alex', domain: 'google.com' },
  { name: 'Bob', domain: 'google.com' },
  { name: 'Garby', domain: 'facebook.com' },
  { name: 'Stones', domain: 'facebook.com' },
  { name: 'Tenz', domain: 'linkedin.com' },
];

like this:

[
 {"domain":"google.com","accounts":["Alex","Bob"]},
 {"domain":"facebook.com","accounts":["Garby","Stones"]},
 {"domain":"linkedin.com","accounts":["Tenz"]}
]

Here is my approach in formal way

let arr = [];
for (let i = 0; i < data.length; i++) {
  let fIndex = arr.findIndex((item) => item.domain === data[i].domain);
  if (fIndex > -1) {
    arr[fIndex].accounts.push(data[i].name);
  } else {
    arr.push({
      domain: data[i].domain,
      accounts: [data[i].name],
    });
  }
}

I am looking for better approaches than this, like minimal lines of code. Could anyone help me in this.

1 Answers1

1

You can try using Sets and Array methods

let data = [
  { name: "Alex", domain: "google.com" },
  { name: "Bob", domain: "google.com" },
  { name: "Garby", domain: "facebook.com" },
  { name: "Stones", domain: "facebook.com" },
  { name: "Tenz", domain: "linkedin.com" },
];
const uniqueDomain = Array.from(new Set(data.map((node) => node.domain)));
const output = uniqueDomain.map((domain) => ({
  domain,
  accounts: data
    .filter((node) => node.domain === domain)
    .map((node) => node.name),
}));
console.log(output);
Nitheesh
  • 19,238
  • 3
  • 22
  • 49