Der Browser-Speicher localStorage ist nicht verfügbar. Entweder unterstützt dein Browser ihn nicht oder du hast ihn deaktiviert oder er ist voll. Ohne localStorage werden deine Lösungen nicht gespeichert.

Funktionale Programmierung

Bei der funktionalen Programmierung werden Funktionen nicht nur wie bisher deklariert und aufgerufen, sondern Funktionen werden auch als Parameter an andere Funktionen übergeben oder Funktionen werden von Funktionen zurückgegeben. Eine Stärke von JavaScript ist es, dass es ebenso wie objektorientierte auch funktionale Programmierung unterstützt.

In JavaScript sind Funktionen Objekte, die wie alle anderen Objekte Variablen zugeordnet werden können. Deklariert man eine Funktion mit dem Schlüsselwort function und anschließendem Funktionsnamen, so wird automatisch eine Variable mit dem Namen der Funktion erzeugt. Diese Variable enthält als Wert die Funktion.

Schauen wir uns das Ganze nun am Beispiel der Array-Methode map (engl.: abbilden) an:
function addOne(x) {
  return x + 1;
}

let startNumbers = [1, 2, 3];
let newNumbers = startNumbers.map(addOne);
console.log(newNumbers); // [2, 3, 4]
Die Methothe map() verlangt als Parameter eine Funktion. In den ersten drei Zeilen haben wir einen Funktion mit dem Namen addOne deklariert. Mit dieser Deklaration wurde gleichzeitig eine Variable mit dem Namen addOne erzeugt. Die Variable addOne enthält die Funktion addOne(). Diese Funktion wird nun der Methode map() übergeben. Intern ruft jetzt map() die Funktion addOne() für jedes Array-Element auf. Dabei wird das Array-Element addOne() als Parameter übergeben. addOne() wird also sukzessive mit den Werten 1, 2 und 3 aufgerufen. Als Ergbnis erhält man die Werte 2, 3 und 4. Diese Werte werden von map() als Array zurückgegeben. Die Methode map() hat also zusammen mit der Funktion addOne() das Array [1, 2, 3] auf das Array [2, 3, 4] abgebildet.

Aufgabe

Schreibe eine Funktion double, die ein Array mit Zahlen entgegennimmt und die diese Zahlen verdoppelt als Array zurückgibt.

Beispiel: double([1, 2, 3]) sollte [2, 4, 6] ergeben.
Versuche eine Lösung mit Schleife und eine Lösung mit der Array-Methode map() zu finden.
// mit Schleife
function double(myNumbers) {
  let result = [];
  for (let i = 0; i < myNumbers.length; i++) {
    result.push(myNumbers[i] * 2);
  }
  return result;
}

// mit map()
function timesTwo(x) {
  return 2 * x;
}

function double(myNumbers) {
  return myNumbers.map(timesTwo);
}

loving