Krasnodar_etc
@Krasnodar_etc
fundraiseup

Почему 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});
- всё, конечно, получится отлично . Но я всё равно не нашёл подробного ответа

Уважаемые, спасибо за ответы
  • Вопрос задан
  • 189 просмотров
Решения вопроса 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+). Имейте ввиду, что члены массива, если они не элементарного типа, опять таки передадутся по ссылке.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы