Javascript-форум (https://javascript.ru/forum/)
-   Учебные материалы (https://javascript.ru/forum/study/)
-   -   Практика: Перевернуть строку. (https://javascript.ru/forum/study/21652-praktika-perevernut-stroku.html)

Magneto 19.09.2011 12:47

Практика: Перевернуть строку.
 
Читая статьи на Хабре иногда попадается что программистам на собеседованиях задают следующее задание.

Нужно создать функцию которая будет принимать любую текстовую строку и возвращать эту же строку, только в перевернутом виде. Тоесть передаем 'Привет мир!' получаем '!рим тевирП'.

Это задание задавалось для программистов знающих PHP или C++, но я подумал "А как бы я решил это используя JavaScript". Решение получилось очень легким.

А как бы Вы решили это задание на JavaScript ?

P.S. Свое решение выложу ближе к вечеру. Хотя уверен что его предложат одним из первых.

Octane 19.09.2011 12:52

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

alert(reverseStr("Привет мир!"));

ваый 19.09.2011 14:22

Octane привел тривиальное (потому что очевидное) решение. Давайте подумаем, как еще можно это сделать. Просто ради фана. Хотя, видимо, самое правильное решение уже приведено, давайте поизвращаемся немного.
function reverseStr(str) {
    var newStr = '', i;
    for (i = str.length - 1; i >= 0; i--) {
        newStr += str.charAt(i);
    }
    return newStr;
}

alert(reverseStr('Привет мир!'));

Какие еще есть варианты функции reverseStr?

Magneto 19.09.2011 21:38

Хочу сказать что вначале это задание я решил следующим образом:
function reverse (data) {
  var letters = [],
      l = data.length;
  while (l--) {
    letters.push(data[l]);
  }
  return letters.join('');
}

alert(reverse('Это обычный текст.'));

В обратном цикле со строки вытаскиваем символы и помещаем их в массив, после этот массив преобразуем в строку.

Немного поразмыслив решил что логичней использовать нативный метод который есть у массивов, reverse():
function reverse (str) {
  var letters = str.split('');
      letters.reverse();
  return letters.join('');
}

alert(reverse('Привет мир, как дела!?'));


Ну и дальше оптимизация:
function reverse (str) {
  return str.split('').reverse().join('');
}

alert(reverse('Привет мир, как дела!?'));

nyols 19.09.2011 23:11

Вариант который предложил Octane - компактный, но вариант от ваый вроде как быстрее (почти в два раза)

ваый 19.09.2011 23:30

Хо-хо! Действительно, в 2.5 раза быстрее!

Kolyaj 19.09.2011 23:51

var str = 'Привет мир!';
alert('\u202E' + str);

Magneto 19.09.2011 23:54

А как вы измеряете скорость?

Цитата:

Сообщение от Kolyaj
var str = 'Привет мир!';
alert('\u202E' + str);

Теперь бы вкратце услышать что здесь произошло. Ну или ссылку.

nyols 19.09.2011 23:56

Я тут

Kolyaj,
а что с этими строчками ? :)

devote 20.09.2011 00:02

Цитата:

Сообщение от Magneto
Теперь бы вкратце услышать что здесь произошло. Ну или ссылку.

Unicode Character 'RIGHT-TO-LEFT OVERRIDE' (U+202E)


Часовой пояс GMT +3, время: 20:55.