2012-03-31 47 views
0

我不得不說是使得原來陣列,以改變出了問題,奇怪的是,加入arr.join("...").split("...")似乎防止這種情況:爲什麼在這種情況下排序修改原始文件?

一點背景:

  • 我的腳本創建並添加東西的array
  • 這陣像arr=[]
  • 的東西被添加傳遞arr[index] = "..."
  • 初始化空的話,我想擁有的副本在arr但排序
  • 當我做了排序,在orignial 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

回答

3

要排序而不所有接合和分離,所述陣列與切片或複製的concat:簡單地使用`arr.sort`

變種排序= arr.slice(0)的.sort()

2

這工作,因爲聯接(),然後拆分()操作在原始數組的一個副本的結果。

+0

但爲什麼不要這樣做,我的意思是,我總是分割/切片/等,而不用擔心修改原稿 – ajax333221 2012-03-31 03:03:23

+1

這只是arr.sort的工作方式,它是「原地」排序。 – nicolaskruchten 2012-03-31 03:03:58

+0

@nicolaskruchten感謝您的回答+1 – ajax333221 2012-03-31 03:09:32

相關問題