Почему сортировка модифицирует оригинал в этом случае? - PullRequest
0 голосов
/ 31 марта 2012

У меня была проблема с изменением исходного массива, любопытно, что добавление arr.join("...").split("..."), кажется, предотвращает это:

Небольшой фон:

  • myскрипт создает и добавляет вещи в array
  • этот массив инициализируется пустым как arr=[]
  • вещи добавляются, пропуская arr[index] = "..."
  • , тогда я хочу получитькопия arr, но отсортированная
  • , когда я делаю сортировку, модифицируется arr

Вот упрощенная версия того, что происходит:

var arr=[], sorted;

arr[0] = "hello";
arr[1] = "world";

//buggy, the original is sorted
//sorted = arr.sort(function(a,b){return (a.length-b.length);});

sorted = arr.join("improbableCollision").split("improbableCollision").sort(function(a,b){return (a.length-b.length);});
  • Почему добавление .join("*").split("*") решает проблему?
  • В чем причина проблемы?
  • Есть ли более элегантный способ исправить это?

Для полного сценария, проверьте это jsFiddle

Ответы [ 2 ]

3 голосов
/ 31 марта 2012

Чтобы отсортировать без всего этого объединения и разделения, скопируйте массив с помощью slice или concat:

var sorted = arr.slice (0) .sort ()

2 голосов
/ 31 марта 2012

Это работает, потому что операция join () затем split () приводит к копированию исходного массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...