javascript中sort的盲點

來源:互聯網
上載者:User

不知道大家是否用過javascript中的sort方法。相信大家使用的時候都應該知道一點,sort方法排序是按照字串排序的,排序的方法就是比較字串大小。
例如:

var values = [1, 2, 3, 10, 5, 8, 20];values.sort();alert(values);

這樣的排序後結果是什麼呢?
[1,10,2,20,3,5,8]為什麼會如此呢,答案就是其排序方式是依據字串比較大小。
大家都知道字串比較大小是從第一個開始比較,如果相同再比較第二個,在1, 2, 3, 10, 5, 8, 20中,很明顯看到1和10是首次比較最小的字串,因此1和10再繼續比較,結果當然是1在前,然後比較選擇出2和20這兩個字串繼續比較,同理。因此可以成功的得到如上結果。
同時說明一下javascript的sort內部實現是冒泡排序方式因此我們可以來類比他的排序過程:

【1】、1,2,10,3,5,20,8 【2】、1,10,2,3,20,5,8【3】、1,10,2,20,3,5,8 【4】、1,10,2,20,3,5,8

排序結束
這樣就是最終的結果啦!
看到這樣的結果很多時候不是我們所需要的,因為我們是對數字排序,而他卻給我們做了一個字串排序,那如何才能得到我們想要的結果1,2,3,5,8,10,20呢?
可以看下w3cschool的例子:

function sortNumber(a,b){return a - b}var arr = new Array(6)arr[0] = "10"arr[1] = "5"arr[2] = "40"arr[3] = "25"arr[4] = "1000"arr[5] = "1"document.write(arr + "<br />")document.write(arr.sort(sortNumber))

sort方法,他可以接受一個參數,這個參數是一個function,而這個function作用就是比較大小,那sort內部是如何?接受function作為參數的。
至今沒有找到介紹內部實現的文章,比較鬱悶。
這樣接受function參數我們也可以使用其他靈活的方法實現:
例如:倒序排序,按照你的意願排序,我們希望使用和排序,
有時候希望使用和排序:10,30,12,50,60,19,24我們希望得到的結果是10(1),12(3),30(3),50(5),24(6),60(6),19(10)
因此這樣的sort很適合推廣,同樣這種接受一個function參數的方法也值得借鑒。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.