Sie sind hier 457
Funktionen erster Klasse
var products = [ { name: "Grapefruit", calories: 170, color: "Rot", sold: 8200 },
{ name: "Orange", calories: 160, color: "Orange", sold: 12101 },
{ name: "Cola", calories: 210, color: "Karamell", sold: 25412 },
{ name: "Diätcola", calories: 0, color: "Karamell", sold: 43922 },
{ name: "Zitrone", calories: 200, color: "Klar", sold: 14983 },
{ name: "Himbeere", calories: 180, color: "Lila", sold: 9427 },
{ name: "Malzbier", calories: 200, color: "Karamell", sold: 9909 },
{ name: "Wasser", calories: 0, color: "Klar", sold: 62123 }
];
Webville Cola
Webville Cola braucht etwas Hilfe mit dem Code für seine
Produkte. Um ihnen helfen zu können, sehen wir uns
die Datenstruktur an, in der die angebotenen Getränke
gespeichert sind:
Sieht aus, als ob sie ihre Produkte in einem Array mit
Objekten speichern. Jedes Objekt ist ein Produkt.
Für jedes Produkt wird der Name, die Anzahl
der Kalorien, die Farbe und die Zahl der
verkauften Flaschen gespeichert.
Können Sie uns helfen, diese Produkte zu sortieren?
Die Sortierung muss nach allen Eigenschaften
möglich sein: Name (name), Kalorien (calories), Farbe
(color) und Anzahl der Verkäufe (sold). Natürlich
soll das so effizient und gleichzeitig so flexibel wie
möglich passieren, damit wir auf möglichst viele
Arten sortieren können.
Der Cola-Analytiker
aus Webville.
458 Kapitel 10
Gespräch über das Sortieren von Arrays
Frank: Hey Leute, ich habe gerade einen Anruf von Webville Cola bekom-
men. Sie brauchen Hilfe mit ihren Produktdaten. Die Produkte sollen nach
einer beliebigen Eigenschaft sortiert werden können, z. B. nach Namen,
Anzahl der verkauften Flaschen, Farbe, Kalorien pro Flasche und so weiter.
Sie möchten die Sortierung möglichst flexibel halten, falls in der Zukunft
neue Eigenschaften dazukommen.
Joe: Wie werden die Daten denn gespeichert?
Frank: Jedes Getränk ist ein Objekt in einem Array mit Eigenschaften für
Name, Anzahl der verkauften Flaschen, Kalorien …
Joe: Okay, verstanden.
Frank: Mein erster Gedanke war, einen einfachen Sortieralgorithmus zu
finden und zu implementieren. Webville Cola hat ja nicht so viele Produkte.
Also muss der Algorithmus nicht kompliziert sein.
Jim: Ich glaube, das geht noch einfacher. Allerdings muss man sich dafür mit
Funktionen erster Klasse auskennen.
Frank: Einfach gefällt mir! Aber wie passen Funktionen erster Klasse da rein? Das
klingt für mich eher kompliziert.
Jim: Überhaupt nicht. Das ist genauso einfach wie das Schreiben einer Funktion, die weiß, wie
man zwei Werte vergleicht. Diese übergeben wir dann an eine andere Funktion, die die eigentliche
Sortierung vornimmt.
Joe: Wie soll unsere Funktion denn genau aussehen?
Jim: Anstatt die komplette Sortierung vorzunehmen, muss unsere Funktion nur wissen, wie man zwei
Werte vergleicht. Soll beispielsweise nach der Anzahl der verkauften Flaschen sortiert werden, reicht es,
zu schreiben:
function compareSold(product1, product2) {
// Code zum Vergleichen
}
Die Details des Codes können wir gleich nachlegen. Sobald wir diese Funktion haben, brauchen wir
sie nur noch an die Sortierfunktion zu übergeben, die dann die eigentliche Arbeit für uns erledigt. Sie
muss nur wissen, wie die Dinge verglichen werden sollen.
Frank: Moment! Wo ist denn diese Sortierfunktion eigentlich?
Jim: Tatsächlich ist sort eine Methode, die du an einem beliebigen Array aufrufen kannst. Es reicht
also, sort für das Getränke-Array aufzurufen und ihr die Vergleichsfunktion zu übergeben, die wir
gleich schreiben. Wenn sort ihre Arbeit getan hat, ist das Array nach den Kriterien sortiert, die wir in
compareSold definiert haben.
Joe: Wenn ich also nach verkauften Flaschen sortieren will, muss ich Zahlen vergleichen. Heißt das,
compareSold muss nur wissen, welcher Wert größer oder kleiner ist?
Jim: Genau. Jetzt wollen wir uns ansehen, wie die Sortierung von Arrays im Einzelnen funktioniert …
Diese Funktion braucht
zwei Produkte, um sie zu
sortieren.
Jim
Frank
Joe

Get JavaScript-Programmierung von Kopf bis Fuß now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.