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

JavaScript之排序函數(shù)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

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

排序算法

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

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

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

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

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

第二個(gè)排序把apple排在了最后,是因?yàn)樽址鶕?jù)ASCII碼進(jìn)行排序,而小寫(xiě)字母a的ASCII碼在大寫(xiě)字母之后。

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

這是因?yàn)?code>Array的sort()方法默認(rèn)把所有元素先轉(zhuǎn)換為String再排序,結(jié)果'10'排在了'2'的前面,因?yàn)樽址?1'比字符'2'的ASCII碼小。

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

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

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

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]

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

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']

忽略大小寫(xiě)來(lái)比較兩個(gè)字符串,實(shí)際上就是先把字符串都變成大寫(xiě)(或者都變成小寫(xiě)),再比較。

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

最后友情提示,sort()方法會(huì)直接對(duì)Array進(jìn)行修改,它返回的結(jié)果仍是當(dāng)前Array

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

相關(guān)文章

  • JavaScript對(duì)象_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    JavaScript對(duì)象_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

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

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

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

    DWR中各種java方法的調(diào)用

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

    慎用 somefunction.prototype 分析

    在寫(xiě) JavaScript 腳本的時(shí)候,為了創(chuàng)建一個(gè)類(lèi),如果不使用框架,一般情況我們都會(huì)使用 prototype 來(lái)給要?jiǎng)?chuàng)建的類(lèi)增加公有方法
    2009-06-06
  • JavaScript數(shù)據(jù)結(jié)構(gòu)中棧的應(yīng)用之表達(dá)式求值問(wèn)題詳解

    JavaScript數(shù)據(jù)結(jié)構(gòu)中棧的應(yīng)用之表達(dá)式求值問(wèn)題詳解

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

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

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

    Smartour 讓網(wǎng)頁(yè)導(dǎo)覽變得更簡(jiǎn)單(推薦)

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

    微信小程序解析富文本過(guò)程詳解

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

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

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

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

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

最新評(píng)論

儋州市| 宜兰市| 弥渡县| 韶关市| 寿宁县| 福贡县| 巴彦淖尔市| 平原县| 华亭县| 萍乡市| 永善县| 霍城县| 西乌珠穆沁旗| 香格里拉县| 百色市| 无棣县| 南雄市| 临海市| 克什克腾旗| 呼伦贝尔市| 克山县| 白玉县| 平远县| 大丰市| 吉隆县| 金寨县| 定陶县| 策勒县| 沂水县| 庆城县| 荆门市| 吴江市| 皮山县| 满城县| 乐至县| 察隅县| 红桥区| 望奎县| 盐边县| 巴林左旗| 永定县|