javascript array Sortierung


brudinero

Grünschnabel
Hallo Leute,

ich habe als Ausgangspunkt folgende JSON Struktur:

{
"Name": "XYZ",
"Geburtstag": "11.11.1111",
"Kategorie": "Allgemein",
"Testirgendwas": true
},

{
"Name": "XYZ",
"Geburtstag": "11.11.1111",
"Kategorie": "Allgemein",
"Testirgendwas": true
},

{
"Name": "XYZ",
"Geburtstag": "11.11.1111",
"Kategorie": "Unterkategorie irgendwas",
"Testirgendwas": true
},

Ich möchte mit der forEach Methode die JSON durchsuchen nach den Kategorien und als return aber jede Kategorie nur EINMAL im Zielarray haben. (Es sind zum Beispiel viele Datensätze in der Kategorie "Allgemein".

let testVar = [];

testJSON.forEach(
(item) => {
testVar.push(item.Kategorie)
});

So sehe ich in der testVar zum Beispiel 50x Allgemein, 20x Unterkategorie irgendwas usw.
Jede Kategorie soll nur einmal angezeigt werden.

Kann jemand helfen?!

Vielen Dank vorab!
 

Sempervivum

Erfahrenes Mitglied
Einfach prüfen, ob die Kategorie schon im Zielarray vorhanden ist:
Code:
let testVar = [];
testJSON.forEach((item) => {
    if (testVar.indexOf(item.Kategorie) == -1) testVar.push(item.Kategorie)
});
 

brudinero

Grünschnabel
Hallöchen,

danke für Deine schnelle Antwort.
Leider funktioniert das bei mir nicht genau.
Er pusht trotzdem alle Kategorien nacheinander rein.
 

ComFreek

Mod | @comfreek
Moderator
Das geht auch effizienter und kürzer mit einem Set:
Javascript:
const data = [
  {
   category: 'a'
  },
  {
   category: 'b'
  },
  {
    category: 'a'
  }
];

// Oneliner!
const allCategories = new Set(data.map(_ => _.category));

// Wenn du es als Array haben möchtest
const allCategoriesAsArray = Array.from(allCategories);
document.body.innerHTML = JSON.stringify(allCategoriesAsArray);
Live-Demo: Edit fiddle - JSFiddle