Aus dem Kurs: Programmierrätsel: JavaScript

Auf und nieder

Auf und nieder immer wieder. Das ist Thema der folgenden Aufgabe, Sie bekommen von mir eine Zeichenkette mit verschiedenen Zahlen getrennt durch ein Leerzeichen und Sie sagen mir, was ist die größte Zahl und was ist die kleinste Zahl in dieser Zeichenkette. Es klingt eifnach, aber Sie bekommen eben von mir, deswegen habe ich es extra betont, eine Zeichenkette und kein Array mit einzelnen Zahlen, und ich will natürlich, dass Sie diese Aufgabe möglichst elegant lösen in so wenig Zeilen Code wie möglich. Hier sehen Sie noch mal den Test, der bestanden werden muss. Also ich habe hier ein String, eine Zeichenkette mit Zahlen und ich erwarte jetzt als Rückgabewert die größte Zahl, die 3314 und die kleinste Zahl hier die 2. Überlegen Sie sich eine Lösung und wenn Sie selber sich eine Lösung ausgedacht haben, dann vergleichen Sie die mit meiner Lösung, die jetzt gleich kommt. Hier haben wir sie, was mache ich. Zunächst einmal möchte ich die Zeichenkette, die ich hier bekomme, in ein Array umwandeln. Das mache ich mit split und ich splitte das Ganze hier an diesen Leerzeichen auf. Jetzt habe ich ein einzelnes Array, aber in diesem Array sind Zeichenketten drin. Jetzt muss ich dafür sorgen, dass diese einzelnen Zeichenketten auch tatsächlich Zahlen werden, dass ich damit arbeiten kann. Und mit .map kann ich eine Funktion aufrufen auf jedes einzelne Element in diesem Array. Und die Funktion, die ich aufrufe, das ist eine eingebaute Funktion in JavaScript und die heißt einfach nur Number aus. Number schauen wir mal, aus Number 3 würde hier genau eine 3 werden, weil eben hier eine Zeichenkette, wenn sie denn konvertierbar ist, in eine Zahl konvertiert wird. Und jetzt habe ich in numbers ein Array aus einzelnen Zahlen, aus einzelnen Integers. Und dieses Array übergebe ich jetzt an die Funktion Math.max, sie ist auch in JavaScript eingebaut und hier habe ich diese sogenannte Spread Notation, diese drei Punkte. Das bedeutet, Math.max erwartet von mir normalerweise oder nicht nur normalerweise, sondern Math.max erwartet von mir kein Array, sondern eine Liste an Zahlen. Das können beliebig viele sein, aber es muss eine Komma-separierte Liste sein und kein Array. Jetzt könnte ich dieses Array hier in so eine Komma-separierte Liste irgendwie überführen, aber modern mache ich es einfach mit der sogenannten Spread-Syntax. Und jetzt kann ich plötzlich auch mein Array an diese Funktion Math.max übergeben. Das Gleiche mache ich hier mit Math.min, und es sind zwar zwei Zahlen, die würden jetzt durch das Pluszeichen addiert, aber dadurch, dass ich hier zwischendrin noch ein Leerzeichen reinnehme, wird der ganze Teil hier als Zeichenkette interpretiert. Dann kommt genau das raus, was ich hier auch erwarte, nämlich eine Zeichenkette mit der größten und mit der kleinesten Zahl.

Inhalt