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

Более простым способом может быть

/(\D+)/.match('1221').nil? #=> true
/(\D+)/.match('1a221').nil? #=> false
/(\D+)/.match('01221').nil? #=> true
395
задан Kamil Kiełczewski 24 July 2019 в 05:37
поделиться

7 ответов

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
поделиться

Вся суть «перевернуть строку на месте» - это устаревший вопрос для собеседований программистов на C и людей, которые были - спросит опрошенный ими (может, из мести?). К сожалению, часть «на месте» больше не работает, потому что строки практически на любом управляемом языке (JS, C # и т. Д.) Используют неизменяемые строки, тем самым разрушая всю идею перемещения строки без выделения новой памяти.

Хотя приведенные выше решения действительно обращают строку, они не делают этого без выделения дополнительной памяти и, следовательно, не удовлетворяют условиям. У вас должен быть прямой доступ к выделенной строке и возможность манипулировать ее исходной ячейкой памяти, чтобы иметь возможность перевернуть ее на месте.

Лично я ненавижу подобные вопросы на собеседовании, но, к сожалению, я уверен, что мы будем видеть их еще долгие годы.

51
ответ дан 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
поделиться
Другие вопросы по тегам:

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