Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.09.2011, 11:47
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

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

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

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

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

P.S. Свое решение выложу ближе к вечеру. Хотя уверен что его предложат одним из первых.
Ответить с цитированием
  #2 (permalink)  
Старый 19.09.2011, 11:52
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

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

alert(reverseStr("Привет мир!"));
Ответить с цитированием
  #3 (permalink)  
Старый 19.09.2011, 13:22
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

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

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

Какие еще есть варианты функции reverseStr?
Ответить с цитированием
  #4 (permalink)  
Старый 19.09.2011, 20:38
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

Хочу сказать что вначале это задание я решил следующим образом:
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('Привет мир, как дела!?'));
Ответить с цитированием
  #5 (permalink)  
Старый 19.09.2011, 22:11
Кандидат Javascript-наук
Отправить личное сообщение для nyols Посмотреть профиль Найти все сообщения от nyols
 
Регистрация: 16.02.2011
Сообщений: 134

Вариант который предложил Octane - компактный, но вариант от ваый вроде как быстрее (почти в два раза)
Ответить с цитированием
  #6 (permalink)  
Старый 19.09.2011, 22:30
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Хо-хо! Действительно, в 2.5 раза быстрее!
Ответить с цитированием
  #7 (permalink)  
Старый 19.09.2011, 22:51
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

var str = 'Привет мир!';
alert('\u202E' + str);
Ответить с цитированием
  #8 (permalink)  
Старый 19.09.2011, 22:54
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

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

Сообщение от Kolyaj
var str = 'Привет мир!';
alert('\u202E' + str);
Теперь бы вкратце услышать что здесь произошло. Ну или ссылку.

Последний раз редактировалось Magneto, 19.09.2011 в 22:56.
Ответить с цитированием
  #9 (permalink)  
Старый 19.09.2011, 22:56
Кандидат Javascript-наук
Отправить личное сообщение для nyols Посмотреть профиль Найти все сообщения от nyols
 
Регистрация: 16.02.2011
Сообщений: 134

Я тут

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

Последний раз редактировалось nyols, 19.09.2011 в 22:59.
Ответить с цитированием
  #10 (permalink)  
Старый 19.09.2011, 23:02
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Magneto
Теперь бы вкратце услышать что здесь произошло. Ну или ссылку.
Unicode Character 'RIGHT-TO-LEFT OVERRIDE' (U+202E)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
добить строку нулями megapup Общие вопросы Javascript 9 05.11.2018 09:49
дописать строку в документ YemSalat Общие вопросы Javascript 5 02.04.2011 16:54
Преобразовать строку в Number с учетом региональных настроек Mutagena Общие вопросы Javascript 2 15.03.2011 00:22
Нужно удалить строку в таблице. Раиль Элементы интерфейса 2 16.12.2010 14:58
по ctrl+Enter перенос курсора на след. строку Crux Internet Explorer 5 09.08.2010 14:30