假設我想要一個返回輸入數組的排序副本的排序函數。我天真地嘗試這樣如何排序數組而不改變原始數組?
function sort(arr) {
return arr.sort();
}
和我與此,這表明,我的sort
方法突變陣列進行了測試。
var a = [2,3,7,5,3,7,1,3,4];
sort(a);
alert(a); //alerts "1,2,3,3,3,4,5,7,7"
我也嘗試過這種方法
function sort(arr) {
return Array.prototype.sort(arr);
}
,但它並不在所有的工作。
有沒有解決這個一個簡單的方法,prefereably不需要手卷我自己的排序算法或陣列中的每個元素複製到一個新的方式?
創建數組的深層副本並對其進行排序。 – evanmcdonnal 2012-03-06 22:12:59
@evanmcdonnal如果所有的想要的都是重新排序而不是數組中每個項目的重複,那麼淺拷貝可能就足夠了。 – Kekoa 2012-03-06 22:14:54
'.sort'需要'this'值是數組,所以在過去的片斷工作,你會怎麼做'.sort.call(ARR)'(儘管它不能解決你的問題)。 – pimvdb 2012-03-06 22:15:19