Arrays
In dieser Lektion betrachten wir Arrays — eine elegante Möglichkeit, eine Liste von Datenobjekten unter einem einzigen Variablennamen zu speichern. Hier schauen wir uns an, warum dies nützlich ist, und erkunden, wie man ein Array erstellt, Items abruft, hinzufügt und entfernt sowie weitere Themen.
Voraussetzungen: | Ein Verständnis von HTML und den Grundlagen von CSS. Vertrautheit mit grundlegenden Datentypen wie Zahlen und Zeichenketten, wie in vorherigen Lektionen behandelt. |
---|---|
Lernergebnisse: |
|
Was ist ein Array?
Arrays werden allgemein als "listenartige Objekte" beschrieben; sie sind im Grunde genommen einzelne Objekte, die mehrere Werte in einer Liste speichern. Array-Objekte können in Variablen gespeichert und ähnlich wie andere Wertetypen behandelt werden, mit dem Unterschied, dass wir auf jeden Wert in der Liste individuell zugreifen und nützliche und effiziente Dinge mit der Liste machen können, wie z.B. sie durchlaufen und dasselbe mit jedem Wert tun. Vielleicht haben wir eine Reihe von Produktartikeln und deren Preisen, die in einem Array gespeichert sind, und wir möchten sie alle durchlaufen und auf einer Rechnung ausdrucken, während wir alle Preise zusammenzählen und den Gesamtpreis unten ausdrucken.
Hätten wir keine Arrays, müssten wir jeden Artikel in einer separaten Variablen speichern und dann den Code, der das Drucken und Addieren ausführt, für jeden Artikel separat aufrufen. Dies wäre viel länger zu schreiben, weniger effizient und fehleranfälliger. Wenn wir 10 Artikel zur Rechnung hinzufügen müssten, wäre es schon ärgerlich, aber was ist mit 100 Artikeln oder 1000? Wir werden später in diesem Artikel auf dieses Beispiel zurückkommen.
Wie in früheren Artikeln lernen wir die grundlegenden Grundlagen von Arrays kennen, indem wir einige Beispiele in Browser-Entwicklerkonsole eingeben.
Hinweis: Scrimba's Aside: Intro to arrays Scrim MDN-Lernpartner bietet eine nützliche interaktive Einführung in Arrays mit Beispielanleitungen und einer Herausforderung zum Testen Ihres Wissens.
Arrays erstellen
Arrays bestehen aus eckigen Klammern und durch Kommas getrennten Objekten.
-
Angenommen, wir möchten eine Einkaufsliste in einem Array speichern. Fügen Sie den folgenden Code in die Konsole ein:
jsconst shopping = ["bread", "milk", "cheese", "hummus", "noodles"]; console.log(shopping);
-
Im obigen Beispiel ist jedes Item eine Zeichenkette, aber in einem Array können wir verschiedene Datentypen speichern — Zeichenketten, Zahlen, Objekte und sogar andere Arrays. Wir können auch Datentypen in einem einzigen Array mischen — wir müssen uns nicht darauf beschränken, nur Zahlen in einem Array und in einem anderen nur Zeichenketten zu speichern. Zum Beispiel:
jsconst sequence = [1, 1, 2, 3, 5, 8, 13]; const random = ["tree", 795, [0, 1, 2]];
-
Bevor Sie fortfahren, erstellen Sie einige Beispiel-Arrays.
Die Länge eines Arrays ermitteln
Sie können die Länge eines Arrays (wie viele Objekte es enthält) auf genau die gleiche Weise herausfinden, wie Sie die Länge (in Zeichen) einer Zeichenkette ermitteln — durch Verwendung der length
Eigenschaft. Versuchen Sie Folgendes:
const shopping = ["bread", "milk", "cheese", "hummus", "noodles"];
console.log(shopping.length); // 5
Zugriff auf Array-Objekte und deren Modifikation
Arrays sind indizierte Sammlungen. Objekte in einem Array sind nummeriert, beginnend bei null. Diese Nummer wird als Index des Objekts bezeichnet. Das erste Objekt hat also den Index 0, das zweite den Index 1 und so weiter. Sie können auf einzelne Objekte im Array zugreifen, indem Sie die Klammernotation verwenden und den Index des Objekts angeben, genau wie Sie auf die Buchstaben in einer Zeichenkette zugegriffen haben.
-
Geben Sie Folgendes in Ihre Konsole ein:
jsconst shopping = ["bread", "milk", "cheese", "hummus", "noodles"]; console.log(shopping[0]); // returns "bread"
-
Sie können auch ein Objekt in einem Array ändern, indem Sie einem einzelnen Array-Objekt einen neuen Wert zuweisen. Versuchen Sie dies:
jsconst shopping = ["bread", "milk", "cheese", "hummus", "noodles"]; shopping[0] = "tahini"; console.log(shopping); // shopping will now return [ "tahini", "milk", "cheese", "hummus", "noodles" ]
Hinweis: Wir haben es schon einmal gesagt, aber nur zur Erinnerung — JavaScript beginnt Arrays bei null zu indizieren!
-
Beachten Sie, dass ein Array innerhalb eines Arrays als mehrdimensionales Array bezeichnet wird. Sie können auf ein Objekt innerhalb eines Arrays zugreifen, das sich selbst in einem anderen Array befindet, indem Sie zwei Klammerpaare zusammen verketten. Um beispielsweise auf eines der Objekte in dem Array zuzugreifen, das das dritte Objekt im
random
Array (siehe vorheriger Abschnitt) ist, könnten Sie so etwas tun:jsconst random = ["tree", 795, [0, 1, 2]]; random[2][2];
-
Versuchen Sie, einige weitere Änderungen an Ihren Array-Beispielen vorzunehmen, bevor Sie fortfahren. Experimentieren Sie ein wenig und sehen Sie, was funktioniert und was nicht.
Den Index von Objekten in einem Array ermitteln
Wenn Sie den Index eines Objekts nicht kennen, können Sie die Methode indexOf()
verwenden.
Die indexOf()
-Methode nimmt ein Objekt als Argument und gibt entweder den Index des Objekts oder -1
zurück, wenn das Objekt nicht im Array ist:
const birds = ["Parrot", "Falcon", "Owl"];
console.log(birds.indexOf("Owl")); // 2
console.log(birds.indexOf("Rabbit")); // -1
Objekte hinzufügen
Um ein oder mehrere Objekte am Ende eines Arrays hinzuzufügen, können wir push()
verwenden. Beachten Sie, dass Sie eines oder mehrere Objekte, die Sie ans Ende Ihres Arrays hinzufügen möchten, einschließen müssen.
const cities = ["Manchester", "Liverpool"];
cities.push("Cardiff");
console.log(cities); // [ "Manchester", "Liverpool", "Cardiff" ]
cities.push("Bradford", "Brighton");
console.log(cities); // [ "Manchester", "Liverpool", "Cardiff", "Bradford", "Brighton" ]
Die neue Länge des Arrays wird zurückgegeben, wenn der Methodenaufruf abgeschlossen ist. Wenn Sie die neue Array-Länge in einer Variablen speichern möchten, könnten Sie so etwas tun:
const cities = ["Manchester", "Liverpool"];
const newLength = cities.push("Bristol");
console.log(cities); // [ "Manchester", "Liverpool", "Bristol" ]
console.log(newLength); // 3
Um ein Objekt am Anfang des Arrays hinzuzufügen, verwenden Sie unshift()
:
const cities = ["Manchester", "Liverpool"];
cities.unshift("Edinburgh");
console.log(cities); // [ "Edinburgh", "Manchester", "Liverpool" ]
Objekte entfernen
Um das letzte Objekt aus dem Array zu entfernen, verwenden Sie pop()
.
const cities = ["Manchester", "Liverpool"];
cities.pop();
console.log(cities); // [ "Manchester" ]
Die pop()
-Methode gibt das entfernte Objekt zurück. Um dieses Objekt in einer neuen Variablen zu speichern, könnten Sie dies tun:
const cities = ["Manchester", "Liverpool"];
const removedCity = cities.pop();
console.log(removedCity); // "Liverpool"
Um das erste Objekt aus einem Array zu entfernen, verwenden Sie shift()
:
const cities = ["Manchester", "Liverpool"];
cities.shift();
console.log(cities); // [ "Liverpool" ]
Wenn Sie den Index eines Objekts kennen, können Sie es mit splice()
aus dem Array entfernen:
const cities = ["Manchester", "Liverpool", "Edinburgh", "Carlisle"];
const index = cities.indexOf("Liverpool");
if (index !== -1) {
cities.splice(index, 1);
}
console.log(cities); // [ "Manchester", "Edinburgh", "Carlisle" ]
In diesem Aufruf von splice()
sagt das erste Argument, wo mit dem Entfernen von Objekten begonnen werden soll, und das zweite Argument sagt, wie viele Objekte entfernt werden sollen. So können Sie mehr als ein Objekt entfernen:
const cities = ["Manchester", "Liverpool", "Edinburgh", "Carlisle"];
const index = cities.indexOf("Liverpool");
if (index !== -1) {
cities.splice(index, 2);
}
console.log(cities); // [ "Manchester", "Carlisle" ]
Auf jedes Objekt zugreifen
Sehr oft möchten Sie auf jedes Objekt im Array zugreifen. Dies können Sie mit der Anweisung for...of
tun:
const birds = ["Parrot", "Falcon", "Owl"];
for (const bird of birds) {
console.log(bird);
}
Manchmal möchten Sie dasselbe mit jedem Objekt in einem Array tun, wodurch Sie ein Array mit den geänderten Objekten erhalten. Dies können Sie mit map()
tun. Der untenstehende Code nimmt ein Array von Zahlen und verdoppelt jede Zahl:
function double(number) {
return number * 2;
}
const numbers = [5, 2, 7, 6];
const doubled = numbers.map(double);
console.log(doubled); // [ 10, 4, 14, 12 ]
Wir übergeben eine Funktion an map()
, und map()
ruft die Funktion einmal für jedes Objekt im Array auf, wobei das Objekt übergeben wird. Es fügt dann den Rückgabewert jedes Funktionsaufrufs zu einem neuen Array hinzu und gibt schließlich das neue Array zurück.
Manchmal möchten Sie ein neues Array erstellen, das nur die Objekte im ursprünglichen Array enthält, die einem Test entsprechen. Das können Sie mit filter()
tun. Der untenstehende Code nimmt ein Array von Zeichenketten und gibt ein Array zurück, das nur die Zeichenketten enthält, die länger als 8 Zeichen sind:
function isLong(city) {
return city.length > 8;
}
const cities = ["London", "Liverpool", "Totnes", "Edinburgh"];
const longer = cities.filter(isLong);
console.log(longer); // [ "Liverpool", "Edinburgh" ]
Wie bei map()
übergeben wir eine Funktion an die filter()
-Methode, und filter()
ruft diese Funktion für jedes Objekt im Array auf und übergibt das Objekt. Wenn die Funktion true
zurückgibt, wird das Objekt zu einem neuen Array hinzugefügt. Schließlich gibt sie das neue Array zurück.
Konvertieren zwischen Zeichenketten und Arrays
Oft erhalten Sie Rohdaten in einer langen Zeichenkette und möchten die nützlichen Objekte in eine nützlichere Form aufteilen und dann Dinge mit ihnen tun, wie sie in einer Datentabelle anzeigen. Dazu können wir die Methode split()
verwenden. In ihrer einfachsten Form nimmt sie ein einzelnes Parameterzeichen, an dem Sie die Zeichenkette aufteilen möchten, und gibt die Teilzeichenketten zwischen dem Trennzeichen als Objekte in einem Array zurück.
Hinweis: Technisch gesehen ist dies eine Zeichenkettenmethode und keine Array-Methode, aber wir haben sie hier mit aufgenommen, da es gut passt.
-
Lassen Sie uns damit spielen, um zu sehen, wie es funktioniert. Erstellen Sie zuerst eine Zeichenkette in Ihrer Konsole:
jsconst data = "Manchester,London,Liverpool,Birmingham,Leeds,Carlisle";
-
Jetzt teilen wir sie bei jedem Komma auf:
jsconst cities = data.split(","); cities;
-
Versuchen Sie schließlich, die Länge Ihres neuen Arrays zu ermitteln und einige Objekte daraus abzurufen:
jscities.length; cities[0]; // the first item in the array cities[1]; // the second item in the array cities[cities.length - 1]; // the last item in the array
-
Sie können auch den umgekehrten Weg mithilfe der
join()
-Methode gehen. Versuchen Sie Folgendes:jsconst commaSeparated = cities.join(","); commaSeparated;
-
Eine andere Möglichkeit, ein Array in eine Zeichenkette zu konvertieren, ist die Verwendung der
toString()
-Methode.toString()
ist arguably simpler alsjoin()
da es keinen Parameter benötigt, aber eingeschränkter. Mitjoin()
können Sie unterschiedliche Trennzeichen angeben, währendtoString()
immer ein Komma verwendet. (Versuchen Sie, Schritt 4 mit einem anderen Zeichen als einem Komma auszuführen.)jsconst dogNames = ["Rocket", "Flash", "Bella", "Slugger"]; dogNames.toString(); // Rocket,Flash,Bella,Slugger
Aktives Lernen: Diese Produkte drucken
Kehren wir zu dem Beispiel zurück, das wir zuvor beschrieben haben – Drucken von Produktnamen und Preisen auf einer Rechnung, dann Summieren der Preise und Drucken am unteren Ende. Im bearbeitbaren Beispiel unten gibt es Kommentare mit Zahlen — jeder dieser markiert einen Ort, an dem Sie etwas dem Code hinzufügen müssen. Dies sind die folgenden:
- Unter dem Kommentar
// number 1
befinden sich eine Anzahl von Zeichenketten, jede enthält einen Produktnamen und Preis getrennt durch einen Doppelpunkt. Sie sollen dies in ein Array umwandeln und es in einem Array namensproducts
speichern. - Unter dem Kommentar
// number 2
beginnen Sie einefor...of()
-Schleife, um durch jedes Objekt improducts
-Array zu gehen. - Unter dem Kommentar
// number 3
möchten wir, dass Sie eine Codezeile schreiben, die das aktuelle Array-Objekt (name:price
) in zwei separate Objekte aufteilt, eins nur mit dem Namen und eins nur mit dem Preis. Wenn Sie nicht wissen, wie das geht, schauen Sie in den Artikel Nützliche Zeichenkettenmethoden für Hilfe oder noch besser, schauen Sie sich den Abschnitt Konvertieren zwischen Zeichenketten und Arrays in diesem Artikel an. - Im Rahmen der obigen Codezeile sollen Sie den Preis von einer Zeichenkette in eine Zahl umwandeln. Wenn Sie nicht mehr genau wissen, wie das geht, schauen Sie sich den ersten Zeichenkettenartikel an.
- Es gibt eine Variable namens
total
, die oben im Code erstellt und auf 0 gesetzt wird. Innerhalb der Schleife (unter// number 4
) möchten wir, dass Sie eine Zeile hinzufügen, die in jeder Iteration der Schleife den aktuellen Objektpreis zu dieser Gesamtsumme hinzufügt, sodass am Ende des Codes die korrekte Gesamtsumme auf der Rechnung ausgegeben wird. Sie könnten einen Zuweisungsoperator dafür benötigen. - Wir möchten, dass Sie die Zeile direkt unter
// number 5
ändern, sodass die VariableitemText
gleich "aktueller Objektname — $aktueller Objektpreis" ist, zum Beispiel "Shoes — $23.99" in jedem Fall, damit die korrekten Informationen zu jedem Objekt auf der Rechnung gedruckt werden. Dies ist nur eine einfache Zeichenketten-Verkettung, die Ihnen vertraut sein sollte. - Schließlich müssen Sie unter dem Kommentar
// number 6
ein}
hinzufügen, um das Ende derfor...of()
-Schleife zu markieren.
Aktives Lernen: Top 5 Suchbegriffe
Eine gute Verwendung für Array-Methoden wie push()
und pop()
ist, wenn Sie einen Datensatz der derzeit aktiven Objekte in einer Web-App führen. In einer animierten Szene könnten Sie zum Beispiel ein Array von Objekten haben, die die aktuell angezeigten Hintergrundgrafiken repräsentieren, und Sie möchten vielleicht nur 50 gleichzeitig anzeigen, aus Leistungs- oder Unübersichtlichkeitsgründen. Wenn neue Objekte erstellt und zum Array hinzugefügt werden, können ältere aus dem Array gelöscht werden, um die gewünschte Anzahl beizubehalten.
In diesem Beispiel zeigen wir Ihnen eine viel einfachere Verwendung — hier geben wir Ihnen eine gefälschte Suchseite, mit einem Suchfeld. Die Idee ist, dass, wenn Begriffe in das Suchfeld eingegeben werden, die letzten 5 vorherigen Suchbegriffe in der Liste angezeigt werden. Wenn die Anzahl der Begriffe über 5 geht, wird der letzte Begriff jedes Mal gelöscht, wenn ein neuer Begriff oben hinzugefügt wird, sodass immer die letzten 5 Begriffe angezeigt werden.
Hinweis: In einer echten Such-App könnten Sie auf die vorherigen Suchbegriffe klicken, um zu vorherigen Suchen zurückzukehren, und es würden tatsächliche Suchergebnisse angezeigt! Wir halten es für den Moment einfach.
Um die App zu vervollständigen, müssen Sie:
- Eine Zeile unter dem Kommentar
// number 1
hinzufügen, die den aktuellen Wert, der in das Suchfeld eingegeben wurde, am Anfang des Arrays hinzufügt. Dieser kann mitsearchInput.value
abgerufen werden. - Eine Zeile unter dem Kommentar
// number 2
hinzufügen, die den Wert entfernt, der sich derzeit am Ende des Arrays befindet.
Testen Sie Ihre Fähigkeiten!
Sie haben das Ende dieses Artikels erreicht, aber können Sie sich die wichtigsten Informationen merken? Sie können einige weitere Tests finden, um zu überprüfen, ob Sie diese Informationen behalten haben, bevor Sie fortfahren — siehe Testen Sie Ihre Fähigkeiten: Arrays.
Fazit
Nach der Durchsicht dieses Artikels sind wir sicher, dass Sie zustimmen werden, dass Arrays ziemlich nützlich erscheinen; Sie werden überall in JavaScript auftauchen, oft in Verbindung mit Schleifen, um dasselbe mit jedem Objekt in einem Array zu tun. Wir werden Ihnen später in diesem Modul alles über Schleifen beibringen.
Im nächsten Artikel geben wir Ihnen eine Herausforderung, um Ihr Verständnis der vorhergehenden Artikel zu testen.
Siehe auch
Array
-
Die
Array
-Objekt-Referenzseite bietet einen detaillierten Leitfaden zu den auf dieser Seite besprochenen Funktionen und vielen anderenArray
-Funktionen.