+3 Daumen
113 Aufrufe


„Schreiben Sie eine JavaScript-Funktion, mit der Sie einen eingegebenen String S umdrehen können, also z. B. 'abcdef' zu 'fedcba'.“

Diesen (oder einen Ă€hnlichen) Satz hört man nicht selten, wenn man sich um einen Job als JavaScript-Entwickler bewirbt. Da ein Coding-Interview fĂŒr gewöhnlich eine Stresssituation ist, ist es ratsam, sich mit potentiellen programmiertechnischen Fragestellungen bereits im Vorfeld zu beschĂ€ftigen, um diese Situation meistern und den Arbeitgeber von sich ĂŒberzeugen zu können. Deshalb bekommst du hier nicht eine, auch nicht zwei, sondern ganze fĂŒnf (!) Möglichkeiten gezeigt, wie du diese Herausforderung meistern kannst. Beachte, dass dein zukĂŒnftiger Arbeitgeber mit solchen Fragen nicht wissen will, ob du programmieren kannst, sondern wie gut (d. h. effizient, vollstĂ€ndig und generisch) du die Aufgabe löst.

Variante 1: Split, Reverse und Join

Die erste Variante verwendet die eingebauten Funktionen split( ), reverse( ) und join( ). Da reverse( ) nur auf Arrays anwendbar ist, wird zunĂ€chst auf dem umzudrehenden String to_reverse die Funktion split aufgerufen, die ein Array mit den Zeichen der im String enthaltenen Character erstellt. Anschließend werden die Elemente dieses Array mit reverse( ) umgedreht und mit join( ) wieder in der neuen Reihenfolge zu einem String zusammengesetzt.

function reverse(to_reverse){
  return to_reverse.split("").reverse().join("");
}

Variante 2: For-Schleife

Es spricht ĂŒbrigens auch nichts gegen die gute alte for-Schleife. Dabei durchlĂ€ufst du jede Stelle in dem umzukehrenden String von hinten nach vorne und fĂŒgst das entsprechend gelesene Zeichen hinten an den Ergebnis-String (hier result) an:

function reverse(to_reverse){
  let result = "";   
  for (var pos = to_reverse.length - 1; pos >= 0; pos--){       
    result += to_reverse[pos];
  }   
  return result;
}
Hierbei handelt es sich um die Variante, die vermutlich von den meisten als erstes vorgeschlagen wird. Deshalb ist es umso besser, wenn du dich durch eine der nÀchsten von deinen Konkurrenten abheben kannst.

Variante 3: Reduce

FĂŒr die Anwendung der reduce( )-Funktion wird ein Array benötigt, weshalb hier erneut zuerst die Funktion split( ) auf dem umzudrehenden String aufgerufen wird. reduce( ) reduziert ein Array auf einen einzigen Wert und erhĂ€lt als Eingabe zwei Elemente, die durch eine bestimmte Funktion (hier definiert nach dem Pfeil-Operator) miteinander verarbeitet werden. In diesem Fall werden die eingegebenen Elemente umgekehrt kombiniert:

function reverse(to_reduce){
  return to_reduce.split("").reduce( (accumulator, current_char) => current_char + accumulator, '');
}
Zugegeben, diese Lösung ist eher fĂŒr die Showoffs gedacht. Dein potentieller Arbeitgeber kann das auch negativ interpretieren, doch der Erfindungsreichtum dieser Lösung sollte ihn eigentlich darĂŒber hinwegsehen lassen.

Variante 4: Spread Syntax (ECMAScript 6)

Diese Lösungsvariante verwendet die Spread-Syntax von „JavaScript 6“. Diese erlaubt es einen String an Stellen zu expandieren, an denen null oder mehr Argumente erwartet werden. D. h. der umzukehrende String wird in ein Array umgewandelt, das aus allen Zeichen des Strings besteht. Dieses wird anschließend mit der Funktion reverse( ) (siehe Variante 1) umgedreht und mit join( ) wieder zu einem String zusammengesetzt.

function reverse(to_reverse){
  return [...to_reverse].reverse().join("");
}
Variante 5: Rekursion

Hier gibt es sogar gleich zwei Notationsmöglichkeiten. Die erste prĂŒft, ob der eingegebene String leer ("") ist und gibt diesen bei true zurĂŒck. Andernfalls ruft die Funktion sich rekursiv auf wobei der Input der zuvor aufgerufene String ab dem zweiten Zeichen ist. Das fĂŒhrende (erste) Zeichen bei der RĂŒckgabe ans Ende angefĂŒgt.

function reverse(to_reverse){
  if(to_reverse == ""){
    return to_reverse;
  } else {
    return reverse(to_reverse.substr(1)) + to_reverse[0];
  }
}
Bei der zweiten Variante kommt der „Elvis-Operator“ ?: zum Einsatz. So gesehen handelt es sich hierbei also nicht um eine weitere Lösungsmöglichkeit, sondern wirklich nur um eine andere Darstellung:

function reverse(to_reverse){
  return to_reverse == "" ? to_reverse : reverse(to_reverse.substr(1)) + to_reverse[0];
}

Autor: Florian André Dalwigk

Dieser Artikel hat 50 Bonuspunkte erhalten. Schreib auch du einen Artikel.
geschlossen: Stack-Artikel
von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community