Ответ
В JavaScript для сортировки массивов без мутации оригинала можно использовать:
- Spread оператор + sort():
const arr = [3, 1, 2];
const sorted = [...arr].sort(); // [1, 2, 3]
- Array.prototype.slice() + sort():
const sorted = arr.slice().sort();
- Array.from() + sort():
const sorted = Array.from(arr).sort();
- Для объектов можно использовать structuredClone (если нужна глубокая копия):
const sorted = structuredClone(arr).sort();
Важно помнить, что sort() изменяет исходный массив, поэтому всегда нужно сначала создать копию. Для сложных структур данных могут понадобиться дополнительные методы клонирования.
Ответ 18+ 🔞
Да ты посмотри, какие варианты подкинули, чтобы массив отсортировать, не трогая оригинал! Прямо как в том анекдоте про Герасима — либо так, либо нихуя. А тут целых четыре способа, ебать мои старые костыли!
Ну, самый популярный и модный — это через spread оператор. Выглядит элегантно, как мартышлюшка в шляпке:
const arr = [3, 1, 2];
const sorted = [...arr].sort(); // [1, 2, 3]
Взял оригинал, размазал его по новому массиву точками, и уже в этом новом делай что хочешь — хоть сортируй, хоть в бубен бей. Оригинал остаётся нетронутым, красота!
Если тебе эти три точки подозрительны, как хитрая жопа, можно по-старинке, через slice(). Ничего не передал — получил полную копию, а потом её и мучай.
const sorted = arr.slice().sort();
Третий вариант — Array.from(). Тоже создаёт новую банду из старой, чтобы разборки были отдельно.
const sorted = Array.from(arr).sort();
А вот если у тебя там не просто цифры, а объекты вложенные, или ещё какая многоэтажная хуйня — тогда уже надо клонировать поглубже. Тут на сцену выходит structuredClone, как здоровый немой татарин — молча, но делает всё на совесть.
const sorted = structuredClone(arr).sort();
Главное-то что запомнить, ёпта? Сам по себе метод sort() — он мутант. Он приходит в твой массив и начинает там всё переставлять, как мебель в квартире. А ты потом такой: "А где мой диван стоял? Блядь, всё пропало!". Поэтому правило простое: сначала скопировал — потом сортировал. Всё остальное — от лукавого, и ведёт к непредсказуемому пиздецу в коде.