Array.sort()

在一個算法題中看到了這個sort方法,方法原理有點模糊玉凯,沒辦法,來馬克一下联贩,加強下記憶吧漫仆。

一. 定義和用法

首先,sort方法是通過原地算法對數(shù)組進行排序的一個方法泪幌,返回一個新的數(shù)組盲厌,同時會修改原數(shù)組署照。

二. 默認無參數(shù)調(diào)用方式

如果sort方法不加參數(shù),直接調(diào)用吗浩,如:

var arr1 = [1, 3, 12, 54];
var arr2 = ['a', 'go', 'me', 'console']
arr1.sort();
arr2.sort();
console.log(arr1)//[1,12, 3, 54]
console.log(arr2)//["a", "console", "go", "me"]

此時是按照字符編碼的順序進行排序建芙。首先把數(shù)組的元素都轉(zhuǎn)換成字符串,再進行比較懂扼,然后返回排序后的數(shù)組禁荸。

三. 按照其他標(biāo)準(zhǔn)進行排序

默認的排序方法,結(jié)果是不可控的阀湿,字符編碼排序靠前的元素就會排在前邊赶熟,如果想按照自己的意愿進行排序,那就需要在調(diào)用sort方法時添加一個參數(shù)炕倘,來體現(xiàn)你的排序意愿。

1.參數(shù)介紹

什么參數(shù)能夠完美體現(xiàn)你的意愿翰撑,那就自然是一個函數(shù)了罩旋。

arr.sort(compareFunction);
function compareFunction(a, b){
  //a:第一個用于比較的元素。
  //b:第二個用于比較的元素眶诈。
  return a - b
}

如果指明了 compareFunction 涨醋,那么數(shù)組會按照調(diào)用該函數(shù)的返回值排序。即 a 和 b 是兩個將要被比較的元素:

  • 如果 compareFunction(a, b) 返回值小于 0 逝撬,那么 a 會被排列到 b 之前浴骂;
  • 如果 compareFunction(a, b) 返回值等于 0 , a 和 b 的相對位置不變宪潮。備注: ECMAScript 標(biāo)準(zhǔn)并不保證這一行為溯警,而且也不是所有瀏覽器都會遵守(例如 Mozilla 在 2003 年之前的版本);
  • 如果 compareFunction(a, b) 返回值大于 0 狡相, b 會被排列到 a 之前梯轻。

注:compareFunction(a, b) 必須總是對相同的輸入返回相同的比較結(jié)果,否則排序的結(jié)果將是不確定的尽棕。

2.操作精髓

看完介紹就會明白喳挑,排序的精髓就在于參數(shù)的返回值,那么根據(jù)自己的意愿控制這個參數(shù)函數(shù)的返回值滔悉,就可以自定義排序規(guī)則了伊诵。
return結(jié)果小于0,前后位置不動回官;return結(jié)果大于0曹宴,前后位置會交換

例1:

var arr = [12,5,43,26,195];
function fun(a, b){
  return a - b
  //a-b可以控制讓數(shù)組按照從小到大的排序
}
arr.sort(fun);
console.log(arr)// [5, 12, 26, 43, 195]

//以上也可以簡化寫成:
arr.sort((a,b)=>a-b);

以上的代碼就是可以通過返回a-b來達到按照大小排序的目的。還有比較復(fù)雜的需求歉提,數(shù)組中的元素是復(fù)雜結(jié)構(gòu)浙炼,也可以通過控制返回值來對數(shù)組進行排序份氧。

例2:

var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic' },
  { name: 'Zeros', value: 37 }
];
items.sort(function (a, b) {
  return (a.value - b.value)
});

例子2就是通過元素的value值的大小對數(shù)組元素進行排序

四.總結(jié)

想要按照自己的意愿對數(shù)組進行排序,通過判斷參數(shù)在不同的場景返回符合自己意愿的返回值就好了弯屈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜗帜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子资厉,更是在濱河造成了極大的恐慌厅缺,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宴偿,死亡現(xiàn)場離奇詭異湘捎,居然都是意外死亡,警方通過查閱死者的電腦和手機窄刘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門窥妇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人娩践,你說我怎么就攤上這事活翩。” “怎么了翻伺?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵材泄,是天一觀的道長。 經(jīng)常有香客問我吨岭,道長拉宗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任辣辫,我火速辦了婚禮旦事,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘急灭。我一直安慰自己族檬,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布化戳。 她就那樣靜靜地躺著单料,像睡著了一般。 火紅的嫁衣襯著肌膚如雪点楼。 梳的紋絲不亂的頭發(fā)上扫尖,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音掠廓,去河邊找鬼换怖。 笑死,一個胖子當(dāng)著我的面吹牛蟀瞧,可吹牛的內(nèi)容都是我干的沉颂。 我是一名探鬼主播条摸,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铸屉!你這毒婦竟也來了钉蒲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤彻坛,失蹤者是張志新(化名)和其女友劉穎顷啼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昌屉,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡钙蒙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了间驮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躬厌。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖竞帽,靈堂內(nèi)的尸體忽然破棺而出扛施,到底是詐尸還是另有隱情,我是刑警寧澤抢呆,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布煮嫌,位于F島的核電站笛谦,受9級特大地震影響抱虐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饥脑,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一恳邀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灶轰,春花似錦谣沸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伴澄,卻和暖如春赋除,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背非凌。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工举农, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敞嗡。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓颁糟,卻偏偏與公主長得像航背,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棱貌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 前言 最近在實際業(yè)務(wù)中用到了大量和排序相關(guān)的問題玖媚,而排序在不依賴于外部庫的前提下,原生的函數(shù)sort就肯定是你的首...
    小兀666閱讀 421評論 0 1
  • 數(shù)組排序函數(shù)键畴,經(jīng)常使用最盅。(抱歉,我沒用過起惕,如果你不問涡贱,我是想不到排序用這個函數(shù)的 。工作中用到數(shù)組排序函數(shù)時惹想,都是...
    anddju閱讀 387評論 0 0
  • Array.Sort()是在我們?nèi)粘9ぷ髦蟹浅3S玫暮瘮?shù)问词,不需要自己編寫排序算法就可以方便的對數(shù)組進行排序。 利用...
  • 問題描述 用Array.sort()在不傳入自定義比較函數(shù)的情況下嘀粱,排序結(jié)果是按位比較的結(jié)果激挪,而不是預(yù)期的按數(shù)字大...
    清水龍蝦閱讀 590評論 0 0
  • 快速排序是數(shù)組常用的排序算法,采用分而治之的思想锋叨,需要用到遞歸垄分,故需要先了解遞。 Array.prototype....
    大龍BBG閱讀 404評論 0 0