Кратко
СкопированоМетод to
возвращает новый массив, в котором порядок всех элементов будет противоположен порядку в исходном массиве: первый элемент станет последним, а последний первым.
Пример
Скопировано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
не имеет аргументов.
Array
возвращает новый массив, в котором порядок всех элементов будет противоположен порядку в исходном массиве.
Как понять
СкопированоМассивы уже имеют метод reverse
для получения массива с обратным порядком элементов. В отличие от него, метод to
не изменяет исходный массив.
Потренируемся на кошках:
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) // ['Чеширский кот', 'Мурр', 'Кузя', 'Мурка']
Если элементы исходного массива являются объектами, то возвращаемый в результате работы метода to
массив будет содержать ссылки, а не новые объекты. Таким образом, изменения объекта в исходном массиве будут видны в созданном массиве и наоборот:
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) элементов».
Подсказки
Скопировано💡 Если массив имеет незаполненные элементы, то to
вернёт 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, 'Эмили Дикинсон']
💡 Поддержка метода to
в основных браузерах и в Node.js появилась сравнительно недавно. Например, попытка использовать to
в 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