Как вы переворачиваете строку в JavaScript?

Как вы переворачиваете строку на месте (или на месте) в JavaScript при передаче в функцию с оператором return? Все без использования встроенных функций (.reverse(), .charAt() и т. Д.)?

395
задан Kamil Kiełczewski 24 July 2019 в 05:37
поделиться

6 ответов

function reverseString(string) {
    var reversedString = "";
    var stringLength = string.length - 1;
    for (var i = stringLength; i >= 0; i--) {
        reversedString += string[i];
    }
    return reversedString;
}
1
ответ дан 22 November 2019 в 23:35
поделиться
String.prototype.reverse_string=function() {return this.split("").reverse().join("");}

или

String.prototype.reverse_string = function() {
    var s = "";
    var i = this.length;
    while (i>0) {
        s += this.substring(i-1,i);
        i--;
    }
    return s;
}
88
ответ дан 22 November 2019 в 23:35
поделиться

Пока вы имеете дело с простыми символами ASCII и с удовольствием используете встроенные функции, это будет работать:

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

Если вам нужно решение, поддерживающее UTF-16 или другие многобайтовые символы, имейте в виду, что эта функция выдаст недопустимые строки Unicode или допустимые строки, которые выглядят забавно.

706
ответ дан 22 November 2019 в 23:35
поделиться

Никакие встроенные методы? Это - лучший способ:

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

    while (len--) {
        newString += str[len];
    }

    return newString;
}

console.log(ReverseString('amgod'))
0
ответ дан 22 November 2019 в 23:35
поделиться

Другой вариант (работает ли он с IE?):

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

РЕДАКТИРОВАТЬ:

Это без использования встроенных функций:

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

Примечание: это [-1] содержит длину строки.

Однако невозможно перевернуть строку на месте, так как присвоение отдельные элементы массива не работают с объектом String (защищен?). Т.е. можно делать присваивания, но результирующая строка не меняется.

0
ответ дан 22 November 2019 в 23:35
поделиться

Вы можете попробовать что-то вроде этого. Я уверен, что есть место для рефакторинга. Я не мог обойтись без функции разделения. Может быть, кто-то знает способ сделать это без разделения.

Код для настройки, можете поместить его в свою библиотеку .js

Код для его использования (имеет код на стороне клиента, только потому, что он был протестирован в браузере) :

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

Фрагмент:

 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 + '' + ток; })} var предложение = "Мой стек переполнен". document.write (предложение.reverseLetters () + '
'); document.write (предложение.reverseWords () + '
');
0
ответ дан 22 November 2019 в 23:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: