Programmierkurs
für Naturwissenschaftler/innen

Array

Arrays werden in verschiedenen Sprachen sehr unterschiedlich gehandhabt, seien Sie also vorsichtig, wenn Sie Array in anderen Sprachen lernen.

Was ist ein Array? (Zuerst ein kurzer Überblick)

Ich werde später mehr dazu sagen, aber zuerst sehen wir uns kurz an, was ein Array ist.

Angenommen, Sie haben einige experimentelle Daten, die Sie verarbeiten (berechnen) müssen. Sie haben nun z. B. 100 Daten und Sie haben folgendes geschrieben:

let data1 = 0.10;
let data2 = 1.2;
let data3 = 3.2;
  :
  :
let data100 = 1.1;

Um die Summe zu erhalten, müssen Sie folgendes schreiben:

let sum = data1 + data2 + (omit) + data100;

Sehr umständlich!

Wenn Sie zusätzliche Daten erhalten, müssen Sie das Folgende hinzufügen

let data101 = 0.92;
let data102 = 5.8;
let data103 = 7.2;
  :
  :

und auch das Programm ändern. Dies ist immer noch einfach, da es sich nur um eine einfache Summe handelt, aber kompliziertere Berechnungen (wie die Berechnung der Varianz) werden viel umständlicher sein. Es kann sogar schneller sein, sie von Hand zu berechnen.

An dieser Stelle kommen Arrays ins Spiel. Die erhaltenen Daten können wie folgt geschrieben werden:

let data = [ 0.10, 1.2, 3.2, ... ];

In diesem Fall können die einzelnen Daten als data[0], data[1], … verwendet werden.

Das obige Programm zur Ermittlung der Summe kann theoretisch wie folgt umgeschrieben werden

let sum = data[0] + data[1] + (omit) + data[99];

aber noch viel besser:

let sum = 0;
for (let i = 0; i < data.length; i++) {
  sum += data[i];
}

(data.length wird später in diesem Artikel behandelt).

Wenn sich die Anzahl der Daten oder der Inhalt des Arrays data ändert, muss sich der Summierungsteil überhaupt nicht ändern. Dadurch wird das Programm kürzer und damit lesbarer.

Also: ein Array ist eine Sammlung von Daten (Werten).

Wie man Arrays verwendet

Schauen wir uns die Arrays genauer an.

Definition eines Arrays

Um ein Array zu definieren wird es, wie Sie im obigen Beispiel sehen können, wie folgt geschrieben:

let data = [ 10, 20, 30 ];

Die linke Seite ist die gleiche wie die bisherige Definition der Variablen. Die rechte Seite ist die Art und Weise, wie man ein Array schreibt. Die Daten werden in eckigen Klammern, getrennt durch Kommata, angegeben. Jede Angabe (in diesem Fall 10, 20 usw.) wird als Element des Arrays (bzw. Arrayelement) bezeichnet.

Sie können die Deklaration und die Initialisierung auch separat schreiben (wie bei einer normalen Variable).

let data;
data = [ 10, 20, 30 ];

In JavaScript ist es möglich, den ganzen Inhalt eines Arrays mit console.log() anzuzeigen.

Geben Sie das folgende Programm ein und führen Sie es aus.

let data = [ 10, 20, 30 ];
console.log(data);

Ergebnis

Verwendung von Elementen eines Arrays

Um mit einzelnen Elementen eines Arrays zu arbeiten, verwenden Sie den Variablennamen + [ + Zahl + ], wie in data[1]. Diese Zahl wird als Index bezeichnet. Arrays von JavaScript werden von 0 an indiziert. Um das erste Element anzuzeigen, verwenden Sie daher console.log(data[0]).

Geben Sie das folgende Programm ein und führen Sie es aus.

let data = [ 10, 20, 30 ];
console.log(data);
console.log(data[0]);
console.log(data[1]);
console.log(data[2]);

Ergebnis

Wie man die Anzahl der Elemente (Länge) eines Arrays bestimmt

Die Anzahl der Elemente in einem Array wird oft als Länge bezeichnet. Die Länge eines Arrays kann mit array-name.length ermittelt werden. Zum Beispiel:

let data = [ 1, 2, 5 ];
console.log(data.length);

Wenn Sie dieses Programm ausführen, wird als Ergebnis 3 angezeigt.

Beachten Sie, dass array.length die Anzahl der Elemente im Array ist. Andererseits ist zu beachten, dass der letzte Index eines Arrays array.length - 1 ist.

Wenn Sie die Summe eines Arrays berechnen wollen, können Sie schreiben:

let data = [ 1.2, 3, 5, 1.1 ];
let sum = 0;

for (let i = 0; i < data.length; i++) {
  sum += data[i];
}

Beachten Sie, dass < für die Bedingung der for-Schleife verwendet wird, nicht <=.

Vielleicht möchten Sie Folgendes schreiben, aber das ist unerwünscht:

let data = [ 1.2, 3, 5, 1.1 ];
let sum = 0;

// ! Kein Fehler, aber vermieden werden soll !
for (let i = 1; i <= data.length; i++) {
  sum += data[i - 1];
}

oder

let data = [ 1.2, 3, 5, 1.1 ];
let sum = 0;

// ! Kein Fehler, aber das soll vermieden werden !
for (let i = 0; i <= data.length - 1; i++) {
  console.log(data[i]);
}

Sie sollten sich daran gewöhnen, for (let i = 0; i < data.length; i++) zu schreiben.

Außerdem dürfen Sie die Anzahl der Daten nicht direkt in das Programm eingeben:

for (let i = 0; i < 4; i++) { // ! schlechter Schreibstil !
  sum += data[i];
}

Dies ist syntaktisch nicht falsch, aber die direkte Angabe der Anzahl von Elementen im Programm in Form von einer konkreten Zahl (eine solche Schreibweise wird als Hartkodierung (eng. hard coding) bezeichnet) ist ein Nährboden für Fehler. Wenn sich also die Anzahl der Elemente im Array ändert, muss nicht nur das Array selbst, sondern auch die for-Schleife geändert werden. Aber Sie sollten nur die Daten ändern müssen, wenn sich die Anzahl der Daten ändert.

Verwenden Sie immer .length, um die Länge eines Arrays zu ermitteln.

Geben Sie das folgende Programm ein und führen Sie es aus.

let data = [ 10, 20, 30 ];
console.log(data);
console.log(data.length);

for (let i = 0; i < data.length; i++) {
  console.log("data[", i, "] =", data[i]);
}

Ergebnis

Geben Sie das folgende Programm ein und führen Sie es aus.

let data = [ 10, 20, 30 ];
console.log(data);
console.log(data.length);

let sum = 0;
for (let i = 0; i < data.length; i++) {
  sum += data[i];
}
console.log(sum);

Ergebnis

  1. Geben Sie das folgende Programm ein und führen Sie es aus.

    // ! Schlechte Schreibweise !
    
    let data = [ 10, 20, 30 ];
    console.log(data);
    console.log(data.length);
    
    let sum = 0;
    for (let i = 0; i < 3; i++) {
      sum += data[i];
    }
    console.log(sum);
    
  2. Geben Sie zusätzliche Daten in data in der 3. Zeile ein, zum Beispiel:

    let data = [ 10, 20, 30, 40 ];
    

    und ändern Sie das Programm, damit die Summe aller Elemente des Arrays berechnet wird (d. h. wenn Sie 40 als neues Element hinzufügen, sollten Sie 100 als Endergebnis erhalten).

  3. Überlegen Sie, warum dies keine gute Art zu schreiben ist.

Ergebnis

Hinweis zur Initialisierung eines Arrays

Wie bereits erläutert, ist es in Ordnung, Folgendes zu schreiben:

let data;
data = [ 1, 2, 3 ];

Aber so kann man es nicht schreiben:

let data;
data[0] = 1.2;

Wenn Sie es unbedingt auf diese Weise schreiben möchten, müssen Sie zuerst ein leeres Array erstellen. Das heißt, Sie müssen z. B. wie folgt schreiben:

let data = [];	// data ist ein (leeres) Array
data[0] = 1.2;

(Fortgeschrittene) Kopieren eines Arrays

Obwohl dies etwas kompliziert ist, wird das Folgende hier erklärt, weil man oft Fehler macht.

Seien Sie vorsichtig, wenn Sie von Kopieren eines Arrays sprechen. Wenn Sie eine Kopie eines Arrays erstellen möchten und das Folgende schreiben, werden Sie wahrscheinlich nicht das erwartete Ergebnis erhalten.

let array1 = [1, 2, 3];
let array2 = array1;

Sie könnten wie folgt schreiben, um das erste Element von array1 zu ändern:

array1[0] = 2;

Mal sehen, was hier passiert.

Überlegen Sie, was passiert (oder angezeigt wird), wenn Sie das folgende Programm ausführen. Führen Sie es dann aus.

let array1 = [1, 2, 3];
let array2 = array1;

console.log("Initial values");
console.log(array1);
console.log(array2);

array1[0] = 2;

console.log("After change");
console.log(array1);
console.log(array2);

Ergebnis

Man würde erwarten, dass nur array1 geändert wird, also dass man

[2, 2, 3]
[1, 2, 3]

erhält, aber in Wirklichkeit wurde auch array2 geändert. Was ist hier eigentlich los?

In Bezug auf das Whiteboard bedeutet dies, dass ein zusätzlicher Name auf dem Whiteboard für das Array vergeben wurde1.

/images/whiteboard-array-empty.png

Um ein Array zu kopieren, müssen Sie daher zunächst ein neues Array erstellen und dann die Elemente einzeln kopieren. Es gibt mehrere Möglichkeiten, eine Kopie eines Arrays zu erstellen, aber ich zeige Ihnen nur die einfachste Methode.

let array1 = [ 1, 2, 3 ];
let array2 = [];

for (let i = 0; i < array1.length; i++) {
  array2[i] = array1[i];
}

Überlegen Sie, was passiert (angezeigt wird), wenn Sie das folgende Programm ausführen. Versuchen Sie dann, ihn auszuführen. Vergleichen Sie sie mit der obigen Übung und stellen Sie die Unterschiede fest.

let array1 = [ 1, 2, 3 ];
let array2 = [];

for (let i = 0; i < array1.length; i++) {
  array2[i] = array1[i];
}

console.log("Initial values");
console.log(array1);
console.log(array2);

array1[0] = 2;

console.log("After change");
console.log(array1);
console.log(array2);
Ergebnis

Typisierte Arrays (Typed Arrays)

In JavaScript gibt es typisierte Arrays (eng. typed arrays). Die wichtigsten davon ist Float64Array (und Float32Array) 2. Es gibt noch andere typisierte Arrays, die Integer speichern, aber diese werden hier nicht beschrieben.

Arrays, die bereits erwähnt wurden, sind sehr flexibel (sie können z. B. sowohl Zeichenketten als auch Zahlen speichern), aber sie können auch langsam sein, wenn die Anzahl der Elemente groß ist.

Typisierte Arrays können nur bestimmte Typen speichern (in diesem Fall reelle Zahlen), aber sie können schneller sein als normale Arrays, wenn die Anzahl der Elemente groß ist.

Konkret deklarieren Sie sie wie folgt:

let data = new Float64Array(3); // Erstellen eines Arrays mit 3 Elementen

Das ist eine ganz andere Schreibweise, die Sie vielleicht verwirrt, aber akzeptieren Sie einfach, dass wir dies so schreiben werden. (Sie müssen etwas über Objektorientierung wissen, wenn Sie dies genau erklären möchten.)

Alle Elemente des Arrays werden auf 0 initialisiert. Das bedeutet, dass die obige Anweisung ein Array [0, 0, 0] erzeugt. Nach der Erstellung kann die Länge (Anzahl der Elemente) des Arrays nicht mehr geändert werden. Ansonsten ist es so ziemlich dasselbe wie ein normales Array.

Wenn Sie ein typisierte Array gleichzeitig deklarieren und initialisieren möchten, können Sie das wie folgt schreiben:

let data = new Float64Array([ 1.0, 2.1, 3.3 ]);

Nämlich wird ein Array als Argument angegeben. Vergessen Sie nicht, die eckige Klammern [ ] einzutippen.

Es ist vielleicht leichter zu verstehen, wenn Sie Folgendes bedenken:

let data0 = [ 1.0, 2.1, 3.3 ];
let data = new Float64Array(data0);
// Im obigen Beispiel wurde das Array direkt als Argument geschrieben,
// nicht über eine Variable.

Dies funktioniert ohne Problem, erfordert aber eine zusätzliche Variable (data0), so dass es besser ist, die erste Schreibweise zu verwenden.

Teilzusammenfassung: Float64Array

// ein Array mit 3 Elementen erstellen (Alle Anfanswerte sind 0)
let data = new Float64Array(3);
// ein Array mit 3 Elementen, deren Anfanswerte 1, 2 und 3 sind, erstellen
let data = new Float64Array([ 1, 2, 3 ]);

Funktionen und Arrays

In JavaScript können Sie Arrays als Argumente und Rückgabewerte von Funktionen verwenden.

Es folgt ein Beispiel für eine Funktion, die ein Array als Argument verwendet (der Rückgabewert in diesem Beispiel ist eine normale Zahl).

function sumarray(arr) {
  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
    sum += arr[i];
  }
  return sum;
}

let data = [ 10, 20, 30 ];
console.log(sumarray(data));

Geben Sie dieses Programm ein und führen Sie es aus.

Ergebnis

Übungen

Machen Sie die folgenden Übungen zur Wiederholung. Es ist anzuraten, dass Sie zumindest die erste Übung durchführen.

Schreiben Sie eine Funktion, die ein Array als Argument nimmt, seinen Mittelwert berechnet und ihn zurückgibt. Geben Sie auch data = [ 71, 80, 89 ] als Daten ein und verwenden Sie diese Funktion, um den Mittelwert dieser Daten zu berechnen.

Ergebnis

Schreiben Sie eine Funktion, die ein Array als Argument nimmt, seine Varianz berechnet und sie zurückgibt. Geben Sie auch data = [ 71, 80, 89 ] als Daten ein und verwenden Sie diese Funktion, um die Varianz dieser Daten zu berechnen.

Ergebnis

Zusammenfassung

Auf dieser Seite haben Sie über Arrays gelernt.

  • Ein Array ist eine Sammlung von Daten.

  • Ein Array kann definiert werden als let data = [ 1, 2, 3 ]; usw.

  • Jedes Element kann durch einen Index angegeben werden.

  • Array-Indizes beginnen bei 0.

  • Die Anzahl der Elemente in einem Array kann als array.length ermittelt werden.

  • Es gibt auch ein typisiertes Array namens Float64Array. Dies ist vorteilhaft, wenn die Anzahl der Elemente groß ist.


1

Diese Erklärung ist nicht ganz korrekt. Es erfordert etwas mehr Wissen, um genau zu wissen, was es ist, also lassen wir es dabei.

2

Float bedeutet eine Fließkommazahl, und 64 (und 32) bedeutet, dass der Wert durch 64 (und 32) Bits dargestellt wird. Kurz gesagt, die 64-Bit-Darstellung kann einen größeren Bereich von Zahlenwerten darstellen.