Как развернуть массив в обратном порядке в JavaScript через reverse?
Нужно вывести массив задом наперёд — последний элемент первым. Нашёл .reverse(), но потом заметил, что исходный массив тоже перевернулся в другом месте кода. Это нормально? Как развернуть массив, не ломая оригинал?
2 ответа
Да, это нормально и важно знать: reverse() меняет исходный массив (мутирует) и заодно возвращает его же.
const arr = [1, 2, 3];
arr.reverse();
console.log(arr); // [3, 2, 1] — оригинал изменён
Если оригинал трогать нельзя — сначала сделай копию, потом переверни:
const arr = [1, 2, 3];
const reversed = [...arr].reverse();
console.log(reversed); // [3, 2, 1]
console.log(arr); // [1, 2, 3] — цел
Копию можно сделать и через slice():
const reversed = arr.slice().reverse();
Перевернуть строку? У строк нет reverse, но можно через массив:
const s = 'привет';
const back = s.split('').reverse().join('');
console.log(back); // 'тевирп'
Типичная ошибка — присвоить результат и думать, что оригинал не тронут:
const original = [1, 2, 3];
const r = original.reverse();
console.log(original); // [3, 2, 1] — тоже перевернулся, это один и тот же массив!
То же касается sort и splice — все три мутируют. Запомни их как «мутирующую тройку».
В современных движках есть немутирующий вариант — toReversed() (ES2023):
const arr = [1, 2, 3];
const rev = arr.toReversed();
console.log(rev); // [3, 2, 1]
console.log(arr); // [1, 2, 3] — не тронут
Если среда свежая (Node 20+, актуальные браузеры) — удобно. Для совместимости со старым окружением надёжнее [...arr].reverse().