JavaScript Objekte nach properties alphabetisch sortieren?
Hallo, ich habe eine kleine Website (Schulprojekt) auf der es mehrere Inputfields und Buttons gibt. Die Seite ist dazu da eine Liste von Autos zu erstellen, die man selbst angibt.
Dafür nutze ich ein Array, dass lauter "Car" Objekte hat, die alle logischerweise andere Eigenschaften haben. Dafür erstelle ich jedes mal beim "Add Car" Knopfdruck ein Objekt, dass auf einer Car-Klasse basiert. Im constructor habe ich ein property namens "brand", nachdem ich gerne sortieren würde.
Jetzt sieht mein Array quasi so aus:
cars = [Car,Car,Car,Car,...]
Jedes Car Objekt hat hier also die Eigenschaft brand, nach dem ich die Objekte gerne sortieren würde.
Könnt ihr mir dabei helfen, dieses Problem zu lösen? PS: Sollte ich Begriffe falsch verwendet haben, wäre eine Verbesserung ganz nett
2 Antworten
Da meines Wissenstandes nach (der ziemlich eingerostet ist) ein Overload der Operatoren (also zum Beispiel von Equal-Operatoren) in JS nicht möglich ist, wird wohl kein Weg daran vorbei führen, mit einer Schleife über das Array zu iterieren und "eigenhändig" zu sortieren.
Vielleicht gibt es auch Bibliotheken, die sowas parametrisiert bereits umgesetzt haben.
Google doch einfach mal nach "Sortieralgorithmen". Wenn dich Informatik interessiert, ist das ein Thema, was dich später sowieso noch viel mehr beschäftigen wird.
Für konkrete Antworten auf dein spezifisches Problem (mit mehr Wissen über JS als ich es bieten kann), bist du hier wahrscheinlich auf der falschen Plattform :-)
Dafür gibt es die Methode sort() in Javascript:
const cars = [
{ brand: "VW" },
{ brand: "BMW" },
{ brand: "Opel" },
{ brand: "Mercedes" }
];
console.log("Unsortiert", cars);
cars.sort((a,b) => {
const c1 = a.brand.toLowerCase();
const c2 = b.brand.toLowerCase();
if (c1 < c2) {
return -1;
} else if (c1 > c2) {
return 1;
} else {
return 0;
}
});
console.log("Sortiert", cars);
Ausgabe
Unsortiert [
{ brand: 'VW' },
{ brand: 'BMW' },
{ brand: 'Opel' },
{ brand: 'Mercedes' }
]
Sortiert [
{ brand: 'BMW' },
{ brand: 'Mercedes' },
{ brand: 'Opel' },
{ brand: 'VW' }
]
Ich sehe übrigens gerade, dass es mit localeCompare noch kürzer geht:
const cars = [
{ brand: "VW" },
{ brand: "BMW" },
{ brand: "Opel" },
{ brand: "Mercedes" }
];
console.log("Unsortiert", cars);
cars.sort((a,b) => a.brand.toLowerCase().localeCompare(b.brand.toLowerCase()) );
console.log("Sortiert", cars);