• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Wie gruppiere ich ein Array?

Tabula_Rasa

Mitglied
Hallo zusammen,

ich habe folgendes Array als Resultat einer Datenbanksuche zurückbekommen:
Code:
[
  {id:1, description: "Test description", tags: "test1"},
  {id:1, description: "Test description", tags: "test2"},
  {id:1, description: "Test description", tags: "test3"},
  {id:2, description: "Test description", tags: "test1"},
  {id:2, description: "Test description", tags: "test2"}
]

und möchte, dass die "tags" zusammengefasst werden als ein Array bestehend aus strings:

Code:
[
{id:1, description: "Test description", tags: ["test1", "test2", "test3"]},
{id:2, description: "Test description", tags: ["test1", "test2"]}
]

Ich habe schon einiges probiert, aber ich bekomme ein falsches Array. Wie sorge ich am effizientesten dafür, dass im Array nur ein Objekt mit derselben Id existiert und in dem die tags als Array bestehend aus strings zusammengefasst wurden?
 
Werbung:
Hier noch eine Alternative mit arr.reduce(). Schließlich ist genau das eines der use cases für diese Funktion.
Javascript:
var arr = [
  {id:1, description: "Test description", tags: "test1"},
  {id:1, description: "Test description", tags: "test2"},
  {id:1, description: "Test description", tags: "test3"},
  {id:2, description: "Test description", tags: "test1"},
  {id:2, description: "Test description", tags: "test2"}
];

var group = (arr, key) => {
  return arr.reduce((acc, cV) => {
    acc[cV[key]] = acc[cV[key]] || {description: cV.description, tags: []};
    acc[cV[key]].tags.push(cV.tags);
    return acc;
  }, {});
};

console.log(group(arr, 'id'));
Du konntest folgende Zeile:
Javascript:
acc[cV[key]] = acc[cV[key]] || {description: cV.description, tags: []};
ersetzen mit:
Javascript:
acc[cV[key]] = null ?? {description: cV.description,tags: []};
Was meiner Meinung nach noch ein wenig eleganter ist. Da nullish coalescing allerdings noch relativ neu ist, solltest du dir vorher den Browser-Support anschauen.
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben