Клавиша / esc

.toReversed()

Возвращает массив с изменённым порядком элементов.

Время чтения: меньше 5 мин

Кратко

Скопировано

Метод toReversed() возвращает новый массив, в котором порядок всех элементов будет противоположен порядку в исходном массиве: первый элемент станет последним, а последний первым.

Пример

Скопировано
        
          
          const planets = ['Меркурий', 'Венера', 'Земля', 'Марс']const reversedPlanets = planets.toReversed()console.log(reversedPlanets)// ['Марс', 'Земля', 'Венера', 'Меркурий']// Исходный массив не изменилсяconsole.log(planets)// ['Меркурий', 'Венера', 'Земля', 'Марс']
          const planets = ['Меркурий', 'Венера', 'Земля', 'Марс']
const reversedPlanets = planets.toReversed()
console.log(reversedPlanets)
// ['Марс', 'Земля', 'Венера', 'Меркурий']

// Исходный массив не изменился
console.log(planets)
// ['Меркурий', 'Венера', 'Земля', 'Марс']

        
        
          
        
      

Как пишется

Скопировано

Array.toReversed() не имеет аргументов.

Array.toReversed() возвращает новый массив, в котором порядок всех элементов будет противоположен порядку в исходном массиве.

Как понять

Скопировано

Массивы уже имеют метод reverse() для получения массива с обратным порядком элементов. В отличие от него, метод toReversed() не изменяет исходный массив.

Потренируемся на кошках:

        
          
          const cats = ['Мурка', 'Кузя', 'Мурр', 'Чеширский кот']console.log(cats.toReversed())// ['Чеширский кот', 'Мурр', 'Кузя', 'Мурка']// Исходный массив не изменилсяconsole.log(cats)// ['Мурка', 'Кузя', 'Мурр', 'Чеширский кот']
          const cats = ['Мурка', 'Кузя', 'Мурр', 'Чеширский кот']
console.log(cats.toReversed())
// ['Чеширский кот', 'Мурр', 'Кузя', 'Мурка']

// Исходный массив не изменился
console.log(cats)
// ['Мурка', 'Кузя', 'Мурр', 'Чеширский кот']

        
        
          
        
      

При использовании метода reverse() исходный массив тоже изменяется:

        
          
          const cats = ['Мурка', 'Кузя', 'Мурр', 'Чеширский кот']console.log(cats.reverse())// ['Чеширский кот', 'Мурр', 'Кузя', 'Мурка']// Исходный массив изменился!console.log(cats)// ['Чеширский кот', 'Мурр', 'Кузя', 'Мурка']
          const cats = ['Мурка', 'Кузя', 'Мурр', 'Чеширский кот']
console.log(cats.reverse())
// ['Чеширский кот', 'Мурр', 'Кузя', 'Мурка']

// Исходный массив изменился!
console.log(cats)
// ['Чеширский кот', 'Мурр', 'Кузя', 'Мурка']

        
        
          
        
      

Если элементы исходного массива являются объектами, то возвращаемый в результате работы метода toReversed() массив будет содержать ссылки, а не новые объекты. Таким образом, изменения объекта в исходном массиве будут видны в созданном массиве и наоборот:

        
          
          const versions = [  {name: 'ES6'}, {name:'ES2016'}, {name: 'ES2017'}]const result = versions.toReversed()console.log(result)// [{ name: 'ES2017'}, {name: 'ES2016'}, {name: 'ES6'}]// Изменим элемент исходного массиваversions[0].year = 2015console.log(versions)// [{name: 'ES6', year: 2015}, {name: 'ES2016'}, {name: 'ES2017'}]// Изменения так же видны в созданном массивеconsole.log(result)// [{ name: 'ES2017'}, {name: 'ES2016'}, {name: 'ES6', year: 2015}]
          const versions = [
  {name: 'ES6'}, {name:'ES2016'}, {name: 'ES2017'}
]
const result = versions.toReversed()
console.log(result)
// [{ name: 'ES2017'}, {name: 'ES2016'}, {name: 'ES6'}]

// Изменим элемент исходного массива
versions[0].year = 2015

console.log(versions)
// [{name: 'ES6', year: 2015}, {name: 'ES2016'}, {name: 'ES2017'}]

// Изменения так же видны в созданном массиве
console.log(result)
// [{ name: 'ES2017'}, {name: 'ES2016'}, {name: 'ES6', year: 2015}]

        
        
          
        
      

Подробнее об особенностях копирования объектов можно прочитать в статье «Поверхностное и глубокое копирование (shallow copy) элементов».

Подсказки

Скопировано

💡 Если массив имеет незаполненные элементы, то toReversed() вернёт undefined как значение для всех незаполненных элементов:

        
          
          const poets = ['Эмили Дикинсон']poets[3] = 'Роберт Фрост'console.log(poets)// ['Эмили Дикинсон', <2 empty items>, 'Роберт Фрост']console.log(poets.toReversed())// ['Роберт Фрост', undefined, undefined, 'Эмили Дикинсон']
          const poets = ['Эмили Дикинсон']
poets[3] = 'Роберт Фрост'

console.log(poets)
// ['Эмили Дикинсон', <2 empty items>, 'Роберт Фрост']

console.log(poets.toReversed())
// ['Роберт Фрост', undefined, undefined, 'Эмили Дикинсон']

        
        
          
        
      

💡 Поддержка метода toReversed() в основных браузерах и в Node.js появилась сравнительно недавно. Например, попытка использовать toReversed() в Node.js v.18.19.0 приведёт к ошибке:

        
          
          try {console.log([1, 2, 3].toReversed())} catch (err) {  console.log('Поймали ошибку! Вот она: ', err.message)}// Поймали ошибку!// Вот она: [1,2,3].toReversed is not a function
          try {
console.log([1, 2, 3].toReversed())
} catch (err) {
  console.log('Поймали ошибку! Вот она: ', err.message)
}
// Поймали ошибку!
// Вот она: [1,2,3].toReversed is not a function