v8 中實現(xiàn) sort() 方法時,采用了 ”插入排序“ 和 ”快速排序“ 兩種排序方式 。對于短數(shù)組(長度 <= 22)來說,插入排序效率更高 。如果沒有傳入 comparefn,則生成一個 comparefn 比較函數(shù) 。在自動生成的比較函數(shù)中,會將傳入的數(shù)組元素通過 TO_STRING 方法轉換為字符串,再行比較 。對比比較函數(shù)中的 b 為游標值,這一點和最新版的 chrome 瀏覽器表現(xiàn)不同 。我們在 sort 方法中傳入的函數(shù)用在了這里:
var order = comparefn(tmp, element);根據(jù)我們傳入函數(shù)的返回值,數(shù)組進行排序操作:
if (order > 0) {a[j + 1] = tmp;} else {break;}如果返回值(a-b)大于0,即 a > b, 則將當前拿來比較的值 a 復制給它的下一位,并繼續(xù)使用游標值 b 向前進行比較 。如果返回值小于等于 0,則結束比較,并將游標值 b 填在最后一次比較值 a 的后面 。總結不管是舊版本還是最新版本的 v8,它們的 sort() 方法的返回結果都沒有發(fā)生變化,只是內部的實現(xiàn)機理有了改變(肯定是向著更優(yōu)的方向改變) 。
為了是 sort() 的返回結果符合預期,我們給它傳入了一個函數(shù)作為比較規(guī)則 。
在比較函數(shù)中,因 v8 版本不同,實現(xiàn)機制有差異,導致它的參數(shù)意義也不大相同,所以我們暫時無需關心它里面參數(shù)的具體含義 。
比較函數(shù)如果寫完全的話,應該是:
arr.sort((a,b) => {const res = a - b;return res > 0 ? 1 : (res < 0 ? -1 : 0 );});即比較函數(shù)的返回值嚴格來說只有三個:-1、0 和 1。
我們主需要記住 return a – b 是升序排列,return b – a 是降序排列即可 。
以上關于本文的內容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!
「愛刨根生活網」www.malaban59.cn小編還為您精選了以下內容,希望對您有所幫助:- 運動抽筋怎么辦?健身運動必知的5個常識
- 新手如何保養(yǎng)筆記本電池壽命 宏基筆記本電池保養(yǎng)秘訣
- 揭秘充電發(fā)燙原因和解決方案 新手機充電發(fā)燙是怎么回事
- 新手怎樣安裝cad2008 cad2008軟件安裝教程
- 新手小白如何用手機使用修圖軟件 怎樣使用手機修圖軟件
- 現(xiàn)在上高速收費不? 現(xiàn)在高速收費嗎
- 華為最新手機上市 華為即將上市手機
- 女人必知的愛情心理
- 淘寶賣什么賺錢 淘寶賣什么利潤大
- 健身菜鳥注意事項
