Arrays

In dieser Lektion betrachten wir Arrays – eine clevere Möglichkeit, eine Liste von Datenobjekten unter einem einzigen Variablennamen zu speichern. Wir betrachten, warum dies nützlich ist, und untersuchen, wie man ein Array erstellt, Elemente daraus abruft, hinzufügt und entfernt und mehr.

Voraussetzungen: Ein grundlegendes Verständnis von HTML und den Grundlagen von CSS. Vertrautheit mit grundlegenden Datentypen wie Zahlen und Strings, wie in den vorherigen Lektionen behandelt.
Lernziele:
  • Was ein Array ist – eine Struktur, die eine Liste von Variablen enthält.
  • Die Syntax von Arrays – [a, b, c] und die Zugriffssyntax, myArray[x].
  • Ändern von Array-Werten mit myArray[x] = y.
  • Manipulation von Arrays unter Verwendung gängiger 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 jeder andere Werttyp behandelt werden, mit dem Unterschied, dass wir auf jeden Wert in der Liste einzeln zugreifen können und sehr nützliche und effiziente Dinge mit der Liste tun können, wie z. B. durch sie zu iterieren und denselben Vorgang auf jeden Wert anzuwenden. Vielleicht haben wir eine Reihe von Produkten und deren Preise in einem Array gespeichert, und wir möchten durch die Liste iterieren, um alles auf einer Rechnung auszugeben, die Preise zu summieren und den Gesamtpreis unten anzuzeigen.

Ohne Arrays müssten wir jedes Element in einer separaten Variablen speichern und den Code, der das Ausdrucken und Addieren übernimmt, für jedes Element separat aufrufen. Dies wäre viel länger zu schreiben, weniger effizient und fehleranfälliger. Bei 10 Elementen auf einer Rechnung wäre das schon mühsam, aber wie wäre es bei 100 oder 1000 Elementen? Wir kehren später in diesem Artikel zu diesem Beispiel zurück.

Wie in vorherigen Artikeln lernen wir die Grundlagen von Arrays, indem wir einige Beispiele in die Browser-Entwicklungstools eingeben.

Arrays erstellen

Arrays bestehen aus eckigen Klammern und Elementen, die durch Kommas getrennt sind.

  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 Element ein String, aber in einem Array können verschiedene Datentypen gespeichert werden – Strings, Zahlen, Objekte und sogar andere Arrays. Es ist auch möglich, Datentypen in einem einzigen Array zu mischen – wir müssen uns nicht darauf beschränken, nur Zahlen in einem Array und nur Strings in einem anderen zu speichern. Beispiel:

    js
    const sequence = [1, 1, 2, 3, 5, 8, 13];
    const random = ["tree", 795, [0, 1, 2]];
    
  3. Erstellen Sie vor dem Fortfahren einige Beispiel-Arrays.

Länge eines Arrays ermitteln

Die Länge eines Arrays (wie viele Elemente es enthält) kann auf genau dieselbe Weise ermittelt werden wie die Länge eines Strings (in Zeichen) – mit der length-Eigenschaft. Probieren Sie Folgendes:

js
const shopping = ["bread", "milk", "cheese", "hummus", "noodles"];
console.log(shopping.length); // 5

Auf Elemente zugreifen und sie ändern

Elemente in einem Array werden nummeriert, beginnend bei null. Diese Zahl wird als Index des Elements bezeichnet. Das erste Element hat also den Index 0, das zweite den Index 1 und so weiter. Sie können auf einzelne Elemente im Array mit der Notation in eckigen Klammern zugreifen und den Index des Elements angeben, ähnlich wie Sie auf die Buchstaben in einem String 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 Element in einem Array ändern, indem Sie einem einzigen Array-Element einen neuen Wert zuweisen. Probieren Sie Folgendes aus:

    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 bereits gesagt, aber hier zur Erinnerung: JavaScript beginnt bei Arrays mit der Indexierung bei null!

  3. Beachten Sie, dass ein Array innerhalb eines Arrays ein mehrdimensionales Array genannt wird. Sie können auf ein Element in einem Array zugreifen, das sich selbst in einem anderen Array befindet, indem Sie zwei eckige Klammern zusammen verketten. Um beispielsweise auf eines der Elemente im dritten Element des random-Arrays (siehe vorherigen Abschnitt) zuzugreifen, könnten Sie Folgendes tun:

    js
    const random = ["tree", 795, [0, 1, 2]];
    random[2][2];
    
  4. Probieren Sie aus, weitere Änderungen an Ihren Array-Beispielen vorzunehmen, bevor Sie fortfahren. Experimentieren Sie ein wenig und schauen Sie, was funktioniert und was nicht.

Index von Elementen in einem Array finden

Wenn Sie den Index eines Elements nicht kennen, können Sie die indexOf()-Methode verwenden. Die indexOf()-Methode nimmt ein Element als Argument und gibt entweder den Index des Elements oder -1 zurück, wenn das Element nicht im Array enthalten ist:

js
const birds = ["Parrot", "Falcon", "Owl"];
console.log(birds.indexOf("Owl")); //  2
console.log(birds.indexOf("Rabbit")); // -1

Elemente hinzufügen

Um ein oder mehrere Elemente an das Ende eines Arrays hinzuzufügen, können wir push() verwenden. Beachten Sie, dass Sie ein oder mehrere Elemente angeben müssen, die Sie ans Ende Ihres Arrays hinzufügen möchten.

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 Folgendes tun:

js
const cities = ["Manchester", "Liverpool"];
const newLength = cities.push("Bristol");
console.log(cities); // [ "Manchester", "Liverpool", "Bristol" ]
console.log(newLength); // 3

Um ein Element an den Anfang des Arrays hinzuzufügen, verwenden Sie unshift():

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

Elemente entfernen

Um das letzte Element 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 Element zurück. Um dieses Element 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 Element aus einem Array zu entfernen, verwenden Sie shift():

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

Wenn Sie den Index eines Elements 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" ]

Im Aufruf von splice() gibt das erste Argument an, wo begonnen werden soll, Elemente zu entfernen, und das zweite Argument gibt an, wie viele Elemente entfernt werden sollen. Es können also mehrere Elemente entfernt werden:

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 Element zugreifen

Sehr häufig möchten Sie auf jedes Element im Array zugreifen. Dies können Sie mit der for...of-Anweisung tun:

js
const birds = ["Parrot", "Falcon", "Owl"];

for (const bird of birds) {
  console.log(bird);
}

Manchmal möchten Sie dasselbe mit jedem Element in einem Array machen und ein Array mit den geänderten Elementen erhalten. Dies können Sie mit map() tun. Der folgende 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 geben map() eine Funktion, und map() ruft die Funktion einmal für jedes Element im Array auf und gibt das Element als Argument weiter. Schließlich fügt es den Rückgabewert jedes Funktionsaufrufs zu einem neuen Array hinzu und gibt das neue Array zurück.

Manchmal möchten Sie ein neues Array erstellen, das nur die Elemente des ursprünglichen Arrays enthält, die einem bestimmten Test entsprechen. Dies können Sie mit filter() tun. Der folgende Code nimmt ein Array von Strings und gibt ein Array zurück, das nur die Strings 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() geben wir eine Funktion an die filter()-Methode, und filter() ruft diese Funktion für jedes Element im Array auf und gibt das Element als Argument weiter. Wenn die Funktion true zurückgibt, wird das Element zum neuen Array hinzugefügt. Schließlich wird das neue Array zurückgegeben.

Konvertierung zwischen Strings und Arrays

Häufig wird Ihnen eine Menge roher Daten in einem langen String präsentiert, und Sie möchten die nützlichen Elemente in eine nützlichere Form extrahieren und dann Dinge damit tun, wie z. B. sie in einer Datentabelle anzeigen. Hierfür können wir die split()-Methode verwenden. In ihrer einfachsten Form nimmt sie einen einzelnen Parameter, das Zeichen, bei dem der String getrennt werden soll, und gibt die Teilstrings zwischen dem Trennzeichen als Elemente in einem Array zurück.

Hinweis: Okay, dies ist technisch gesehen eine String-Methode, keine Array-Methode, aber wir haben sie hier eingefügt, da sie hier gut hinpasst.

  1. Spielen wir damit, um zu sehen, wie es funktioniert. Erstellen Sie zunächst einen String in Ihrer Konsole:

    js
    const data = "Manchester,London,Liverpool,Birmingham,Leeds,Carlisle";
    
  2. Trennen wir ihn nun bei jedem Komma:

    js
    const cities = data.split(",");
    cities;
    
  3. Zum Schluss versuchen Sie, die Länge Ihres neuen Arrays zu ermitteln und einige Elemente 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 mit der join()-Methode gehen. Probieren Sie Folgendes:

    js
    const commaSeparated = cities.join(",");
    commaSeparated;
    
  5. Eine andere Möglichkeit, ein Array in einen String zu konvertieren, besteht darin, die toString()-Methode zu verwenden. toString() ist wohl einfacher als join(), da es keinen Parameter erfordert, aber eingeschränkter ist. Mit join() können Sie verschiedene Trennzeichen angeben, während toString() immer ein Komma verwendet. (Versuchen Sie es mit einem anderen Zeichen als einem Komma bei Schritt 4.)

    js
    const dogNames = ["Rocket", "Flash", "Bella", "Slugger"];
    dogNames.toString(); // Rocket,Flash,Bella,Slugger
    

Aktives Lernen: Diese Produkte ausdrucken

Kehren wir zu dem Beispiel zurück, das wir zuvor beschrieben haben – Produktnamen und Preise auf einer Rechnung auszugeben, dann die Preise zu summieren und sie unten auf der Rechnung auszugeben. Im bearbeitbaren Beispiel unten gibt es Kommentare mit Zahlen – jede davon kennzeichnet eine Stelle, an der Sie etwas zum Code hinzufügen müssen. Sie sind wie folgt:

  1. Unter dem Kommentar // number 1 sind eine Reihe von Strings, die jeweils einen Produktnamen und einen Preis enthalten, getrennt durch einen Doppelpunkt. Wandeln Sie dies in ein Array um und speichern Sie es in einer Variablen namens products.
  2. Unter dem Kommentar // number 2 starten Sie eine for...of()-Schleife, um jedes Element des products-Arrays durchzugehen.
  3. Unter dem Kommentar // number 3 schreiben Sie eine Zeile Code, die das aktuelle Array-Element (name:price) in zwei separate Elemente aufteilt, eines mit nur dem Namen und eines mit nur dem Preis. Wenn Sie nicht wissen, wie das geht, sehen Sie sich den Artikel Nützliche String-Methoden an oder noch besser den Abschnitt Konvertierung zwischen Strings und Arrays aus diesem Artikel.
  4. Konvertieren Sie im Rahmen der obigen Codezeile auch den Preis von einem String in eine Zahl. Wenn Sie sich nicht daran erinnern, wie das geht, schauen Sie sich den ersten String-Artikel an.
  5. Es gibt eine Variable namens total, die oben im Code erstellt und auf 0 gesetzt wird. Innerhalb der Schleife (unter // number 4) schreiben Sie eine Zeile, die den Preis des aktuellen Elements in jeder Iteration der Schleife zu dieser Gesamtmenge addiert, sodass am Ende des Codes die korrekte Gesamtsumme auf die Rechnung gedruckt wird. Sie benötigen möglicherweise einen Zuweisungsoperator dafür.
  6. Ändern Sie die Zeile direkt unter // number 5, sodass die Variable itemText gleich "aktueller Artikelname – $aktueller Artikelpreis" gesetzt wird, z. B. "Schuhe – $23.99", sodass die richtigen Informationen für jedes Element auf der Rechnung angezeigt werden. Dies ist nur einfache String-Konkatenation, die Ihnen bekannt sein sollte.
  7. Fügen Sie schließlich unter dem Kommentar // number 6 ein } hinzu, um das Ende der for...of()-Schleife zu markieren.

Aktives Lernen: Die Top-5-Suchen

Eine gute Anwendung für Array-Methoden wie push() und pop() ist die Verwaltung einer Liste aktuell aktiver Elemente in einer Webanwendung. In einer animierten Szene könnten Sie beispielsweise ein Array von Objekten haben, das die aktuell angezeigten Hintergrundgrafiken repräsentiert, und Sie möchten möglicherweise aus Leistungs- oder Übersichtsgründen nur maximal 50 anzeigen lassen. Wenn neue Objekte erstellt und dem Array hinzugefügt werden, können ältere aus dem Array gelöscht werden, um die gewünschte Anzahl beizubehalten.

In diesem Beispiel zeigen wir eine viel einfachere Anwendung – hier geben wir Ihnen eine gefälschte Suchseite mit einer Suchleiste. Die Idee ist, dass bei der Eingabe von Begriffen in die Suchleiste die letzten fünf Suchbegriffe in der Liste angezeigt werden. Wenn die Anzahl der Begriffe fünf übersteigt, wird jedes Mal, wenn ein neuer Begriff hinzugefügt wird, der letzte Begriff gelöscht, sodass stets die letzten fünf Begriffe angezeigt werden.

Hinweis: In einer echten Suchanwendung könnten Sie wahrscheinlich auf die vorherigen Suchbegriffe klicken, um diese erneut zu suchen, und es würden tatsächliche Suchergebnisse angezeigt! Wir halten es aber vorerst einfach.

Um die App zu vervollständigen, müssen Sie:

  1. Unter dem Kommentar // number 1 eine Zeile 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. Unter dem Kommentar // number 2 eine Zeile 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 finden weitere Tests, um zu überprüfen, ob Sie die Informationen behalten haben, bevor Sie weitermachen – sehen Sie sich Testen Sie Ihre Fähigkeiten: Arrays an.

Fazit

Nach dem Lesen dieses Artikels werden Sie sicher zustimmen, dass Arrays ziemlich nützlich sind; Sie werden sie in JavaScript überall finden, oft in Verbindung mit Schleifen, um dasselbe mit jedem Element in einem Array zu tun. Wir werden Ihnen später im Modul alles über Schleifen beibringen.

Im nächsten Artikel geben wir Ihnen eine Herausforderung, um Ihr Verständnis der bisher behandelten Artikel zu testen.

Siehe auch

Indizierte Sammlungen

Ein Leitfaden auf fortgeschrittenem Niveau für Arrays und deren Verwandte, die typisierten Arrays.

Array

Die Referenzseite zum Array-Objekt – für eine detaillierte Referenz zu den in dieser Seite behandelten Funktionen und vielen weiteren.

Nebenbei: Einführung in Arrays, Scrimba MDN-Lernpartner

Eine interaktive Lektion, die eine Einführung in Arrays bietet.