Arrays (Listen)
Dauer: 35 Minuten
- Arrays werden vorgestellt
Ziel: Arrays („Listen“) nutzen können
In vielen Programmiersprachen gibt es eine Möglichkeit, mehrere Werte in einer Art Liste zu speichern und zu verwenden. In JavaScript heißt solch eine Datenstruktur Array.
Angenommen wir haben folgende Situation:
Benutzer sollen beliebig viele ganze Zahlen
eingeben können. Das Programm soll nach der
Eingabe der Zahlen zu jeder eingegebenen Zahl
die Quadratzahl ausgeben:
Wie viele Zahlen möchtest Du eingeben?
4
Zahl 1: 3
Zahl 2: 8
Zahl 3: 4
Zahl 4: 10
Dies sind die Quadratzahlen:
3 - 9
8 - 64
4 - 16
10 - 100
⟶ Mit den bisher besprochenen Konzepten kann dies nur schwer umgesetzt werden.
Arrays sind im Prinzip Listen, die mehrere Elemente
enthalten. In JavaScript werden Arrays mit eckigen
Klammern umgeben und die enthaltenen Elemente
werden mit Komma getrennt [ , , …]
:
const listOfNumbers = [1,2,3,4];
const listOfString = ["hallo","welt"];
In JavaScript dürfen die Elemente eines Arrays unterschiedliche Datentypen haben, d.h. wir dürfen Arrays willkürlich „befüllen“:
let numbers = [1,2,3,4];
let strings = ["hallo", "welt"];
// null steht hier ggf. für "nicht bekannt"
let mix = [0,"one",true,null];
// ein Array kann andere Arrays enthalten
let arrays = [numbers,strings];
Insbesondere können Arrays andere Arrays enthalten, (und auch Objekte, siehe später).
Arrays haben in JavaScript den Datentyp object
(siehe typeof [1,2,3]
in der Konsole), weil sie
im Prinzip lediglich JavaScript-Objekte mit
Zahlen als Schlüssel sind (siehe spätere Lektion
zu Objekten).
Zugriff auf die Elemente eines Arrays
Ein Array der Länge n
hat n Einträge bzw. Elemente.
Der erste Eintrag hat den Index 0
und der letzte
den Index n-1
.
Zugriff auf die Elemente durch mit [
und ]
geklammerte Index-Ausdrücke.
let a = [1,2,3];
// den Elementen im Array werden nun andere Werte zugewiesen:
a[0] = 10;
a[1] = 200;
a[2] = 3000;
// Ausgabe einzelner Elemente
console.log("Die erste Zahl im Array: " + a[0]);
console.log("Die dritte Zahl im Array: " + a[2]);
Ein Zugriff außerhalb der Indexgrenzen verursacht keinen Laufzeitfehler! Ist kein Element an einem Index vorhanden, dann ergibt der Zugriff undefined.
let a = [1,2,3];
console.log("Zugriff außerhalb der Grenzen ergibt " + a[5]);
// ---> undefined !!!
Zugriff auf die Länge eines Arrays
Zusätzlich zu seinen Elemente besitzt ein Array
eine spezielle Eigenschaft (keine Funktion bzw.
Methode!), die jeweils die aktuelle Länge des
Arrays enthält. Sie heißt length
und wird mit
einem .
angesprochen.
let a = [3,5,1,6,8,9];
console.log("Länge des Arrays " + a.length);
// ---> 6
Dies ist insbesondere für die Verwendung von
Arrays mit for
-Schleifen nützlich, wie wir noch
sehen werden.
Mehrdimensionale Arrays
Arrays können auch andere Arrays enthalten. Diese werden manchmal mehrdimensionale Arrays genannt.
let triangle = [[1],[2,3],[4,5,6],[7,8,9,10]];
console.log(triangle.length); // 4
console.log(triangle[2]) // [4,5,6]
console.log(triangle[2].length) // 3
console.log(triangle[2][1]) // 5
Warum wurde in dem obigen Beispiel die Variable
triangle
(„Dreieck“) genannt?
⟶ Auf dem Whiteboard skizzieren.
Dies kann etwas gewöhnungsbedürftig sein. Gebraucht wird dies z.B. bei Matrix-Berechnungen.
Ausblick
Arrays haben viele Hilfsmethoden in JavaSript, siehe Mozilla Developer Network (MDN) für einen Überblick.
Mit myList.push(3)
wird z.B. die Zahl 3
an das
Ende des Arrays in der Variablen/Konstanten myList
angehängt.
const list = [1,2,3];
// 4 ans Ende des Arrays in list anhängen
list.push(4);
Im Beispiel oben mit push
zeigt sich, dass die
Länge eines Arrays beim Hinzufügen neuer Elemente
automatisch erhöht wird. Außerdem ist im Beispiel
zu sehen, dass einer Konstanten in JavaScript
lediglich kein neuer Wert zugewiesen werden darf.
Der Wert bzw. „Inhalt“ der Konstanten kann sich
allerdings schon ändern (hier ein Array).
Alle Elemente eines Arrays „durchlaufen“
Häufig tritt die Situation auf, dass auf alle Elemente eines Arrays
im Code nacheinander zugegriffen werden soll („Array durchlaufen“).
In vielen Programmiersprachen und auch in JavaScript kann dazu
eine for
-Schleife verwendet werden, was wir bald in einer
anderen Lektion besprechen werden.
Alternativ zur for
-Schleife kann das Array auch mit forEach
so durchlaufen werden, dass für jedes Element eine bestimmte Funktion
mit dem Element als Parameter aufgerufen wird:
const list = [1,2,3];
function showSquares(x){ console.log(x*x) };
// durchlaufe Array und rufe für jedes
// Element item im Array showSquares(item) auf
list.forEach(showSquares);
// Ausgabe ---> 1 4 9 16
Eine Funktion, die wie oben verwendet wird, wird auch Callback-Funktion genannt. Hierbei werden insbesondere Pfeilfunktionen interessant, da sie den Code deutlich vereinfachen. Obiges Beispiel kann mit Pfeilfunktion umgeschrieben werden:
const list2 = [1,2,3,4];
list2.forEach(item => console.log(item*item));
// Ausgabe ---> 1 4 9 16
Pfeilfunktionen als alternative Syntax für Funktionen werden in einer späteren Lektion behandelt.