Krasnodar_etc
@Krasnodar_etc
avito front

Почему Array.sort() сортирует оба массива?

Почти без описания - просто вбейте в консоль:

var mass = [1,3,5,7,2,4];
var b = mass;
b.sort(function(a,b){
return a - b
});
console.log(mass, b);


Что меня удивило - сортируются оба массива, хотя в коде сортировка только для b . Беглый поиск ответа в гугле ничего не дал. Может кто рассказать, почему так происходит?

Да, если сделать var b = a.map(function(i){return i});
- всё, конечно, получится отлично . Но я всё равно не нашёл подробного ответа

Уважаемые, спасибо за ответы
  • Вопрос задан
  • 188 просмотров
Решения вопроса 2
usdglander
@usdglander
Yipee-ki-yay
Попробуйте что то вроде:
...
var b = JSON.parse(JSON.stringify(mass));
...

Суть в том, что при var b = mass вы не создаёте именно новый массив, а создаёте ещё один указатель на уже существующий массив. Так что a и mass - тождественны. Чтобы разделить эти массивы вам надо в b сделать копию массива mass.
Ответ написан
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Потому что mass является указателем на массив, и после b = mass у вас просто две переменных указывают на один и тот же объект в памяти. То же самое будет происходит со всеми типами, кроме элементарных -- строк, чисел и булевых значений.

Чтобы продублировать массив, можно сделать как у вас написано или mass.slice(0) (или [...mass] в ES6+). Имейте ввиду, что члены массива, если они не элементарного типа, опять таки передадутся по ссылке.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы