Кратко
СкопированоМетод 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