最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年06月30日 14:30:54   作者:liaoxuefeng  
排序也是在程序中經常用到的算法。這篇文章主要介紹了JavaScript之排序函數(shù),有興趣的可以了解一下

排序算法

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

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

// 看上去正常的結果:
['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft'];

// apple排在了最后:
['Google', 'apple', 'Microsoft'].sort(); // ['Google', 'Microsoft", 'apple']

// 無法理解的結果:
[10, 20, 1, 2].sort(); // [1, 10, 2, 20]

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

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

這是因為Arraysort()方法默認把所有元素先轉換為String再排序,結果'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']

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

從上述例子可以看出,高階函數(shù)的抽象能力是非常強大的,而且,核心代碼可以保持得非常簡潔。

最后友情提示,sort()方法會直接對Array進行修改,它返回的結果仍是當前Array

var a1 = ['B', 'A', 'C'];
var a2 = a1.sort();
a1; // ['A', 'B', 'C']
a2; // ['A', 'B', 'C']
a1 === a2; // true, a1和a2是同一對象

相關文章

  • JavaScript對象_動力節(jié)點Java學院整理

    JavaScript對象_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了JavaScript對象的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 微信小程序中插入激勵視頻廣告并獲取收益(實例代碼)

    微信小程序中插入激勵視頻廣告并獲取收益(實例代碼)

    這篇文章主要介紹了微信小程序中插入激勵視頻廣告并獲取收益,通過代碼給大家介紹了如何插入及注意事項,需要的朋友可以參考下
    2019-12-12
  • DWR中各種java方法的調用

    DWR中各種java方法的調用

    DWR是一個框架,簡單的說就是能夠在javascript直接調用java方法,而不必去寫一大堆的javascript代碼。它的實現(xiàn)是基于ajax的,可以實現(xiàn)無刷新效果。不少DWR的例子,但大都只是某種方法的調用只在使用層面上介紹DWR,并不涉更多的技術與設計javascript中是如何調用的。
    2016-05-05
  • 慎用 somefunction.prototype 分析

    慎用 somefunction.prototype 分析

    在寫 JavaScript 腳本的時候,為了創(chuàng)建一個類,如果不使用框架,一般情況我們都會使用 prototype 來給要創(chuàng)建的類增加公有方法
    2009-06-06
  • JavaScript數(shù)據(jù)結構中棧的應用之表達式求值問題詳解

    JavaScript數(shù)據(jù)結構中棧的應用之表達式求值問題詳解

    這篇文章主要介紹了JavaScript數(shù)據(jù)結構中棧的應用之表達式求值問題,詳細分析了中綴表達式、后綴表達式等概念、原理與轉換方法,以及基于后綴表達式實現(xiàn)的表達式求值相關操作技巧,需要的朋友可以參考下
    2017-04-04
  • JS實現(xiàn)簡單的星期格式轉換功能示例

    JS實現(xiàn)簡單的星期格式轉換功能示例

    這篇文章主要介紹了JS實現(xiàn)簡單的星期格式轉換功能,涉及JavaScript基于Date()對象的日期時間操作技巧,需要的朋友可以參考下
    2018-07-07
  • Smartour 讓網(wǎng)頁導覽變得更簡單(推薦)

    Smartour 讓網(wǎng)頁導覽變得更簡單(推薦)

    這篇文章主要介紹了Smartour 讓網(wǎng)頁導覽變得更簡單(推薦),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 微信小程序解析富文本過程詳解

    微信小程序解析富文本過程詳解

    這篇文章主要介紹了微信小程序解析富文本過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值
    2019-07-07
  • 詳解ajax、fetch、axios的區(qū)別

    詳解ajax、fetch、axios的區(qū)別

    本文主要介紹了詳解ajax、fetch、axios的區(qū)別,眾所周知它們都用來發(fā)送請求,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01
  • JS正則表達式修飾符global(/g)用法分析

    JS正則表達式修飾符global(/g)用法分析

    這篇文章主要介紹了JS正則表達式修飾符global(/g)用法,結合實例形式分析了JS全局匹配修飾符/g的功能、使用方法與相關注意事項,需要的朋友可以參考下
    2016-12-12

最新評論

盈江县| 河东区| 中方县| 临海市| 靖远县| 崇义县| 隆子县| 罗甸县| 济源市| 汕尾市| 江山市| 台湾省| 安庆市| 亚东县| 鄂伦春自治旗| 游戏| 遵义县| 庐江县| 南雄市| 两当县| 长垣县| 中宁县| 杨浦区| 武城县| 蕉岭县| 哈巴河县| 万载县| 萨嘎县| 陆丰市| 当雄县| 奇台县| 深水埗区| 库车县| 贵南县| 温宿县| 随州市| 盐边县| 乐昌市| 中卫市| 珲春市| 和平区|