599 Stimmen

Wie kehrt man in JavaScript eine Zeichenkette an Ort und Stelle um?

Wie kehrt man eine Zeichenkette in JavaScript an Ort und Stelle um, wenn sie an eine Funktion mit einer Rückgabeanweisung übergeben wird, ohne integrierte Funktionen zu verwenden ( .reverse() , .charAt() usw.)?

0 Stimmen

Sie dürfen also nicht .charAt() verwenden, um die Zeichen der Zeichenkette zu erhalten?

192 Stimmen

Das können Sie nicht. JavaScript-Zeichenfolgen sind unveränderlich, was bedeutet, dass der Speicher, der ihnen zugewiesen ist, nicht beschrieben werden kann, was echte "In-Place"-Umkehrungen unmöglich macht.

3 Stimmen

Re: crescentfresh's Kommentar siehe stackoverflow.com/questions/51185/

0voto

Justin Largey Punkte 1904

Sie könnten es so versuchen. Ich bin mir sicher, dass es noch Spielraum für eine Überarbeitung gibt. Ich kam nicht umhin, die Split-Funktion zu verwenden. Vielleicht kennt jemand eine Möglichkeit, es ohne Split zu machen.

Code zum Einrichten, den Sie in Ihre .js-Bibliothek einfügen können

Code zur Verwendung (hat clientseitigen Code, nur weil er in einem Browser getestet wurde):

var sentence = "My Stack is Overflowing."
document.write(sentence.reverseLetters() + '<br />');
document.write(sentence.reverseWords() + '<br />');

Schnipsel:

String.prototype.aggregate = function(vals, aggregateFunction) {

  var temp = '';
  for (var i = vals.length - 1; i >= 0; i--) {
    temp = aggregateFunction(vals[i], temp);
  }
  return temp;
}

String.prototype.reverseLetters = function() {
  return this.aggregate(this.split(''),
    function(current, word) {
      return word + current;
    })
}

String.prototype.reverseWords = function() {
  return this.aggregate(this.split(' '),
    function(current, word) {
      return word + ' ' + current;
    })
}

var sentence = "My Stack is Overflowing."
document.write(sentence.reverseLetters() + '<br />');
document.write(sentence.reverseWords() + '<br />');

0voto

KJ Sudarshan Punkte 1397

Wir können das String-Array von beiden Enden aus iterieren: Start und Ende, und bei jeder Iteration vertauschen.

function reverse(str) {
 let strArray = str.split("");
 let start = 0;
 let end = strArray.length - 1;

 while(start <= end) {
  let temp = strArray[start];
  strArray[start] = strArray[end];
  strArray[end] = temp;

  start++;
  end--;
 }
 return strArray.join("");
}

Obwohl sich die Anzahl der Operationen verringert hat, ist die Zeitkomplexität immer noch O(n), da die Anzahl der Operationen immer noch linear mit der Größe der Eingabe skaliert.

Ref: AlgoDaily

0voto

Thevs Punkte 3129

Eine andere Variante (funktioniert sie auch mit IE?):

String.prototype.reverse = function() {
    for (i=1,s=""; i<=this.length; s+=this.substr(-i++,1)) {}
    return s;
}

EDITAR:

Dies geschieht ohne die Verwendung von integrierten Funktionen:

String.prototype.reverse = function() {
    for (i=this[-1],s=""; i>=0; s+=this[i--]) {}
    return s;
}

Hinweis: this[-1] enthält die Länge der Zeichenkette.

Es ist jedoch nicht möglich, die Zeichenkette an Ort und Stelle umzukehren, da die Zuweisung an einzelnen Array-Elementen funktioniert nicht mit String-Objekt (geschützt?). D.h. Sie können Zuweisungen tun, aber die resultierende Zeichenfolge ändert sich nicht.

0voto

muqsith Punkte 19
    function reverse(string)
    {
    let arr = [];
    for(let char of string) {
      arr.unshift(char);
    }
    let rev = arr.join('')
    return rev
    }

    let result = reverse("hello")
    console.log(result)

0voto

Nathan Romano Punkte 6908
var str = "IAMA JavaScript Developer";
var a=str.split(''), b = a.length;
for (var i=0; i<b; i++) {
    a.unshift(a.splice(1+i,1).shift())
}
a.shift();
alert(a.join(''));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X