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 ein Array ist — eine Struktur, die eine Liste von Variablen hält.
  • Die Syntax von Arrays — [a, b, c] und die Zugriffssyntax, myArray[x].
  • Modifizieren von Array-Werten mit myArray[x] = y.
  • Array-Manipulation mit üblichen Eigenschaften und Methoden wie length, push(), pop(), join(), und split().
  • Fortgeschrittene Array-Methoden wie forEach(), map(), und filter().

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.

  1. Angenommen, wir möchten eine Einkaufsliste in einem Array speichern. Fügen Sie den folgenden Code in die Konsole ein:

    js
    const shopping = ["bread", "milk", "cheese", "hummus", "noodles"];
    console.log(shopping);
    
  2. 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:

    js
    const sequence = [1, 1, 2, 3, 5, 8, 13];
    const random = ["tree", 795, [0, 1, 2]];
    
  3. 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:

js
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.

  1. Geben Sie Folgendes in Ihre Konsole ein:

    js
    const shopping = ["bread", "milk", "cheese", "hummus", "noodles"];
    console.log(shopping[0]);
    // returns "bread"
    
  2. Sie können auch ein Objekt in einem Array ändern, indem Sie einem einzelnen Array-Objekt einen neuen Wert zuweisen. Versuchen Sie dies:

    js
    const 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!

  3. 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:

    js
    const random = ["tree", 795, [0, 1, 2]];
    random[2][2];
    
  4. 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:

js
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.

js
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:

js
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():

js
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().

js
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:

js
const cities = ["Manchester", "Liverpool"];
const removedCity = cities.pop();
console.log(removedCity); // "Liverpool"

Um das erste Objekt aus einem Array zu entfernen, verwenden Sie shift():

js
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:

js
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:

js
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:

js
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:

js
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:

js
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.

  1. Lassen Sie uns damit spielen, um zu sehen, wie es funktioniert. Erstellen Sie zuerst eine Zeichenkette in Ihrer Konsole:

    js
    const data = "Manchester,London,Liverpool,Birmingham,Leeds,Carlisle";
    
  2. Jetzt teilen wir sie bei jedem Komma auf:

    js
    const cities = data.split(",");
    cities;
    
  3. Versuchen Sie schließlich, die Länge Ihres neuen Arrays zu ermitteln und einige Objekte daraus abzurufen:

    js
    cities.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
    
  4. Sie können auch den umgekehrten Weg mithilfe der join()-Methode gehen. Versuchen Sie Folgendes:

    js
    const commaSeparated = cities.join(",");
    commaSeparated;
    
  5. Eine andere Möglichkeit, ein Array in eine Zeichenkette zu konvertieren, ist die Verwendung der toString()-Methode. toString() ist arguably simpler als join() da es keinen Parameter benötigt, aber eingeschränkter. Mit join() können Sie unterschiedliche Trennzeichen angeben, während toString() immer ein Komma verwendet. (Versuchen Sie, Schritt 4 mit einem anderen Zeichen als einem Komma auszuführen.)

    js
    const 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:

  1. 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 namens products speichern.
  2. Unter dem Kommentar // number 2 beginnen Sie eine for...of()-Schleife, um durch jedes Objekt im products-Array zu gehen.
  3. 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.
  4. 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.
  5. 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.
  6. Wir möchten, dass Sie die Zeile direkt unter // number 5 ändern, sodass die Variable itemText 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.
  7. Schließlich müssen Sie unter dem Kommentar // number 6 ein } hinzufügen, um das Ende der for...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:

  1. 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 mit searchInput.value abgerufen werden.
  2. 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 anderen Array-Funktionen.