国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript之排序函數(shù)_動力節(jié)點Java學院整理

2024-05-06 15:15:08
字體:
供稿:網(wǎng)友

排序算法

排序也是在程序中經(jīng)常用到的算法。無論使用冒泡排序還是快速排序,排序的核心是比較兩個元素的大小。如果是數(shù)字,我們可以直接比較,但如果是字符串或者兩個對象呢?直接比較數(shù)學上的大小是沒有意義的,因此,比較的過程必須通過函數(shù)抽象出來。通常規(guī)定,對于兩個元素xy,如果認為x < y,則返回-1,如果認為x == y,則返回0,如果認為x > y,則返回1,這樣,排序算法就不用關(guān)心具體的比較過程,而是根據(jù)比較結(jié)果直接排序。

JavaScript的Arraysort()方法就是用于排序的,但是排序結(jié)果可能讓你大吃一驚:

// 看上去正常的結(jié)果:['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft'];// apple排在了最后:['Google', 'apple', 'Microsoft'].sort(); // ['Google', 'Microsoft", 'apple']// 無法理解的結(jié)果:[10, 20, 1, 2].sort(); // [1, 10, 2, 20]

第二個排序把apple排在了最后,是因為字符串根據(jù)ASCII碼進行排序,而小寫字母a的ASCII碼在大寫字母之后。

第三個排序結(jié)果是什么鬼?簡單的數(shù)字排序都能錯?

這是因為Arraysort()方法默認把所有元素先轉(zhuǎn)換為String再排序,結(jié)果'10'排在了'2'的前面,因為字符'1'比字符'2'的ASCII碼小。

如果不知道sort()方法的默認排序規(guī)則,直接對數(shù)字排序,絕對栽進坑里!

幸運的是,sort()方法也是一個高階函數(shù),它還可以接收一個比較函數(shù)來實現(xiàn)自定義的排序。

要按數(shù)字大小排序,我們可以這么寫:

var arr = [10, 20, 1, 2];arr.sort(function (x, y) {  if (x < y) {    return -1;  }  if (x > y) {    return 1;  }  return 0;}); // [1, 2, 10, 20]

如果要倒序排序,我們可以把大的數(shù)放前面:

var arr = [10, 20, 1, 2];arr.sort(function (x, y) {  if (x < y) {    return 1;  }  if (x > y) {    return -1;  }  return 0;}); // [20, 10, 2, 1]

默認情況下,對字符串排序,是按照ASCII的大小比較的,現(xiàn)在,我們提出排序應該忽略大小寫,按照字母序排序。要實現(xiàn)這個算法,不必對現(xiàn)有代碼大加改動,只要我們能定義出忽略大小寫的比較算法就可以:

var arr = ['Google', 'apple', 'Microsoft'];arr.sort(function (s1, s2) {  x1 = s1.toUpperCase();  x2 = s2.toUpperCase();  if (x1 < x2) {    return -1;  }  if (x1 > x2) {    return 1;  }  return 0;}); // ['apple', 'Google', 'Microsoft']

忽略大小寫來比較兩個字符串,實際上就是先把字符串都變成大寫(或者都變成小寫),再比較。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 陆丰市| 孝昌县| 凤山县| 定西市| 交城县| 会宁县| 长汀县| 弥勒县| 电白县| 临漳县| 崇左市| 昭觉县| 无棣县| 花莲县| 金平| 乌苏市| 安塞县| 忻城县| 康平县| 英吉沙县| 夏邑县| 天等县| 噶尔县| 澳门| 广灵县| 沙田区| 厦门市| 萝北县| 台安县| 灵武市| 鸡泽县| 天柱县| 泗水县| 南通市| 武乡县| 南昌市| 桃源县| 甘肃省| 二连浩特市| 榆中县| 大悟县|