Javascript中數(shù)組的sort()方法

最近的項目開發(fā)中用到了數(shù)組的排序,想著將平時遇到的問題整理下來骗露,算是一種積累岭佳,閑話少敘,開始正題:
sort() 方法用于對數(shù)組元素進(jìn)行排序萧锉,并返回數(shù)組珊随,默認(rèn)排序是根據(jù)字符串的Unicode碼點
語法:arrayObject.sort(sortby),其中sortby可選,規(guī)定數(shù)組排序順序叶洞,必須是函數(shù)
注:如果調(diào)用該方法時沒有使用參數(shù)鲫凶,將按照字母順序?qū)?shù)組中的
元素進(jìn)行排序,說的更精確一些衩辟,是按照字符編碼的順序進(jìn)行排序螟炫,要實現(xiàn)這一點,首先應(yīng)該把數(shù)組的元素都轉(zhuǎn)換成字符串艺晴,以便進(jìn)行比較昼钻。

如果想要按照其它的標(biāo)準(zhǔn)進(jìn)行排序,就需要提供比較函數(shù)封寞,該函數(shù)要比較兩個值然评,然后返回一個用于說明這兩個值的相對順序的數(shù)字,比較函數(shù)應(yīng)該具有兩個參數(shù)a,b 其返回值如下:
(1)若a小于b ,在排序后的數(shù)組中a 應(yīng)該出現(xiàn)在b之前狈究,則返回一個小于0的值
(2)若a等于b,則返回0
(3)若a大于b,則返回一個大于0的值
1碗淌、我們舉一個栗子~~~:

var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"

document.write(arr + "<br />")
document.write(arr.sort())

輸出:

George,John,Thomas,James,Adrew,Martin
Adrew,George,James,John,Martin,Thomas

2、我們再舉一個栗子~~~:

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())

輸出:

10,5,40,25,1000,1

請注意抖锥,上面的代碼沒有按照數(shù)值的大小對數(shù)字進(jìn)行排序亿眠,要實現(xiàn)這一點,就必須使用一個排序函數(shù):

function sortNumber(a, b) {
    console.log(a);
    console.log(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))

這里可以看出磅废,如果按照升序排列纳像,那么方法為:

function sortNumber(a, b) {
    return a - b
}

如果是按照降序排列則為:

function sortNumber(a, b) {
    return b - a
}

當(dāng)然如果想根據(jù)數(shù)組對象中的某個屬性值進(jìn)行排序呢?
sort方法接收一個函數(shù)作為參數(shù)还蹲,這里嵌套一層函數(shù)用來接收對象屬性名爹耗,
其他部分代碼與正常使用sort方法相同。

var arr = [
    { name: 'zopp', age: 0 },
    { name: 'gpp', age: 18 },
    { name: 'yjj', age: 8 }
];

function compare(property) {
    return function(a, b) {
        var value1 = a[property];
        var value2 = b[property];
        return value1 - value2;
    }
}
console.log(JSON.stringify(arr.sort(compare('age'))))

輸出:

[{"name":"zopp","age":0},{"name":"yjj","age":8},{"name":"gpp","age":18}]

如何根據(jù)參數(shù)不同谜喊,來確定是升序排列潭兽,還是降序排序呢?

var sortBy = function(attr, rev) {
    //第二個參數(shù)沒有傳遞 默認(rèn)升序排列
    if (rev == undefined) {
        rev = 1;
    } else {
        rev = (rev) ? 1 : -1;
    }
    return function(a, b) {
        a = a[attr];
        b = b[attr];
        if (a < b) {
            return rev * -1;
        }
        if (a > b) {
            return rev * 1;
        }
        return 0;
    }
}

使用方式:

newArray.sort(sortBy('number', false))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斗遏,一起剝皮案震驚了整個濱河市山卦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诵次,老刑警劉巖账蓉,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逾一,居然都是意外死亡铸本,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門遵堵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箱玷,“玉大人怨规,你說我怎么就攤上這事∥悖” “怎么了波丰?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舶得。 經(jīng)常有香客問我掰烟,道長,這世上最難降的妖魔是什么沐批? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任纫骑,我火速辦了婚禮,結(jié)果婚禮上珠插,老公的妹妹穿的比我還像新娘惧磺。我一直安慰自己,他們只是感情好捻撑,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缤底,像睡著了一般顾患。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上个唧,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天江解,我揣著相機與錄音,去河邊找鬼徙歼。 笑死犁河,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的魄梯。 我是一名探鬼主播桨螺,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酿秸!你這毒婦竟也來了灭翔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤辣苏,失蹤者是張志新(化名)和其女友劉穎肝箱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稀蟋,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡煌张,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了退客。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骏融。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绎谦,到底是詐尸還是另有隱情管闷,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布窃肠,位于F島的核電站包个,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏冤留。R本人自食惡果不足惜碧囊,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纤怒。 院中可真熱鬧糯而,春花似錦、人聲如沸泊窘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烘豹。三九已至瓜贾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間携悯,已是汗流浹背祭芦。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留憔鬼,地道東北人龟劲。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像轴或,于是被迫代替她去往敵國和親昌跌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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