Javascript.RU

reverse

Синтаксис

arrayObj.reverse()

Описание, примеры

Данный метод изменяет исходный массив.
После его применения порядок элементов в массиве меняется на обратный.

Он возвращает ссылку на измененный массив.

arr = [1,2,3]

a = arr.reverse() // [ 3, 2, 1]

for(var i=0; i<a.length; i++) {
  alert(a[i]) // 3, 2, 1
}

Обратите внимание, никакого нового массива не создается. Изменяется сам массив arr и возвращается ссылка на измененный массив.

arr = [1,2,3]

a = arr.reverse() // [ 3, 2, 1]

alert(a === arr) // true

См. также


Автор: yesnik, дата: 4 октября, 2011 - 19:33
#permalink

Не повторяйте моей ошибки - я считал, что этот метод сортирует массив по убыванию. На самом деле, он просто меняет порядок следования элементов на противоположный.

var arr = ['c', 'a', 'b', 'd'];
arr.reverse();
alert(arr); // Вернет: d,b,a,c

Автор: Гость (не зарегистрирован), дата: 27 апреля, 2012 - 09:09
#permalink

А я вообще всегда думал, что reverse() генерирует новый массив и возвращает ссылку на него, а старый остаётся без изменений. Если бы не JS-консоль и мой гениальный моск, я бы так и дальше думал.


Автор: Гость (не зарегистрирован), дата: 27 апреля, 2012 - 09:14
#permalink

но всё же, почему разработчики так не сделали? к примеру, хотелось бы делать так:

var a = [1,2,3,4];
var b = a.reverse();
alert(a); // 1,2,3,4
alert(b); // 4,3,2,1

Это фишка производительности или что?
В текущем существующем случае для получения вышеописанного метода приходится делать так:

var a = [1,2,3,4];
var b = a.concat([]); // ну или ещё как нибудь полностью дублировать массив (именно дублировать, создать копию вместо передачи по ссылке, однако тут встаёт вопрос о передаче элементов массива по ссылке, нет времени разбираться) 
b.reverse();
alert(a); // 1,2,3,4
alert(b); // 4,3,2,1

Автор: Гость (не зарегистрирован), дата: 24 мая, 2012 - 11:43
#permalink

Что мешает расширить прототип?

Array.prototype.reversedCopy = function(){
   var arr = [];
   for( var i = this.length; i--; ){
       arr.push( this[i] );
   };
   return arr;
};

var a = [1, 2, 3];
var b = a.reversedCopy();

alert(a); // [1, 2, 3]
alert(b); // [3, 2, 1]

Автор: Гость (не зарегистрирован), дата: 17 июля, 2012 - 21:10
#permalink

Спасибо, капитан!


Автор: madrabbyt, дата: 29 мая, 2014 - 22:55
#permalink

Прототипы - сила. Можно еще reverse() для String задать:

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

Автор: Гость (не зарегистрирован), дата: 1 апреля, 2017 - 19:13
#permalink

ошибка в последней строке
});
надо убрать скобку перед ;


Автор: vladpak, дата: 18 октября, 2016 - 00:23
#permalink

Илья спасибо за подробное объяснение, все это работает, а как насчет например если -123? чтобы вернуло -321?
вот мой код
var x = 123;
var reverse = function (x) {
var n = x.toString();
var rev = [];
for (var i = n.length-1; i >=0; i--){
rev+=n[i]
}
return parseInt(rev)

}

reverse(x);


Автор: Guinee (не зарегистрирован), дата: 1 апреля, 2017 - 19:29
#permalink

ФУНКЦИЯ ВОЗВРАЩАЕТ ЗНАЧЕНИЕ - ЗНАЧИТ ПРОСТОЙ ЕЕ ВЫЗОВ НИЧЕГО НЕ ДАСТ!!
НАДО ПРИСВОИТЬ ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ. Т.Е

y=reverse(x);

а потом распечатать

document.write(y);

или просто

document.write(reverse(x));

и не обязательно в функции обьявлять переменную rev как массив,
так как вместо числа фунция вернет не число, а массив, что не есть хорошо.

т.е. окончательно код функции вместе с ее вызовом будет такая

var x = 123;
var reverse = function (x) {
var n = x.toString();
var rev = "";
for (var i = n.length-1; i >=0; i--) rev+=n[i];
return parseInt(rev);
}
document.write(x+"");
y=reverse(x);
document.write(y+"");


Автор: Гость (не зарегистрирован), дата: 29 июля, 2017 - 13:48
#permalink

Могёт кто нибудь подсказать зачем нужны скобки у reverse()


Автор: Гость (не зарегистрирован), дата: 12 октября, 2017 - 23:19
#permalink

потому что это метод, а не свойство ))


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
15 + 5 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum