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

Chandan Singh Punkte 21

Hinzugefügt für die Umkehrung der Zeichenfolge ohne Schleife, es ist durch Rekursion arbeiten.

function reverse(y){
    if(y.length==1 || y.length == 0 ){
        return y;
    }
    return y.split('')[y.length - 1]+ reverse(y.slice(0, y.length-1));
}
console.log(reverse("Hello"));

0voto

Steven Mcsorley Punkte 71
function reverse_string(string)
{
var string;

var len = string.length;

var stringExp = string.split('');
var i;
for (i = len-1; i >=0;i--)
{
var result = document.write(stringExp[i]);
}

return result;
}

reverse_string("This is a reversed string");

//Ausgaben: gnirts desrever a si sihT

0voto

WesleyAC Punkte 474

Keine eingebauten Methoden? Da Strings in Javascript unveränderlich sind, wollen Sie wahrscheinlich die eingebauten Methoden wie split, join usw. verwenden. Aber hier sind zwei Möglichkeiten, ohne diese Methoden zu gehen:

function ReverseString(str) {
    var len = str.length;
    var newString = [];

    while (len--) {
        newString.push(str[len]);
    }

    return newString.join('');
}

console.log(ReverseString('amgod')) //dogma

function RecursiveStringReverse(str, len) {
    if (len === undefined)
        len = str.length - 1;

    if (len > 0)
        return str[len] + RecursiveReverse(str, --len);

    return str[len];
}

console.log(RecursiveStringReverse('Hello, world!'))// !dlrow ,olleH

0voto

charlchad Punkte 2907

Hinzufügen zum String-Prototyp ist ideal (nur für den Fall, dass es in die Kern-JS-Sprache hinzugefügt wird), aber Sie müssen zunächst prüfen, ob es existiert, und fügen Sie es hinzu, wenn es nicht existiert, wie so:

String.prototype.reverse = String.prototype.reverse || function () {
    return this.split('').reverse().join('');
};

0voto

masakielastic Punkte 4370

Ohne Konvertierung von String in Array;

String.prototype.reverse = function() {

    var ret = "";
    var size = 0;

    for (var i = this.length - 1; -1 < i; i -= size) {

        if (
          '\uD800' <= this[i - 1] && this[i - 1] <= '\uDBFF' && 
          '\uDC00' <= this[i]     && this[i]     <= '\uDFFF'
        ) {
            size = 2;
            ret += this[i - 1] + this[i];
        } else {
            size = 1;
            ret += this[i];
        }
    }

    return ret;
}

console.log('ananam anañam' === 'mañana manana'.reverse());

mit Array.reverse ohne Umwandlung von Zeichen in Codepunkte;

String.prototype.reverse = function() {

    var array = this.split("").reverse();

    for (var i = 0; i < this.length; ++i) {

        if (
          '\uD800' <= this[i - 1] && this[i - 1] <= '\uDBFF' && 
          '\uDC00' <= this[i]     && this[i]     <= '\uDFFF'
        ) {
            array[i - 1] = array[i - 1] + array[i];
            array[i] = array[i - 1].substr(0, 1);
            array[i - 1] = array[i - 1].substr(1, 1);
        }

    }

    return array.join("");
}

console.log('ananam anañam' === 'mañana manana'.reverse());

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