成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)組方法之sort()詳解

daryl / 1979人閱讀

摘要:大家都知道,在的數(shù)組方法中,有一個方法,可以直接調(diào)用對數(shù)組進行排序。例如輸出在默認情況下,會按照升序排列數(shù)組項,需要注意的是方法會改變原來的數(shù)組。注意即使數(shù)組中的每一項都是數(shù)字,方法比較的也是字串。

大家都知道,在JS的數(shù)組方法中,有一個sort()方法,可以直接調(diào)用對數(shù)組進行排序。例如:

var arr1=[1,5,8,9,7,2];
arr1.sort();
console.log(arr1);
// 輸出: [1,2,5,7,8,9]

在默認情況下,sort()會按照升序排列數(shù)組項,需要注意的是sort()方法會改變原來的數(shù)組。
sort()方法實現(xiàn)排序的原理:
sort()方法會調(diào)用每一個數(shù)組項的toString()轉(zhuǎn)型方法,然后比較得到的字符串(字符串的比較規(guī)則會在下文中講到),以決定如何排序。注意即使數(shù)組中的每一項都是數(shù)字,sort()方法比較的也是字串。

var arr2=[1,15,8,9,7,2];
arr2.sort();
console.log(arr2);
// 輸出: [1,15,2,7,8,9]

注意:15明明比2要大,卻排在了2的前面,這就是sort()方法調(diào)用每一個數(shù)組項的toString(),然后比較得到的字符串造成的。
實現(xiàn)理想的的排序:
為了避免上述情況,我們可以向sort()中傳入一個比較函數(shù),根據(jù)比較函數(shù)的返回值決定是升序排列還是降序排列。
比較函數(shù)接收兩個參數(shù):如果第一個參數(shù)應該位于第二個參數(shù)之前則返回一個負數(shù),如果兩個參數(shù)相等,則返回0,否則返回一個正數(shù)。

//compare()函數(shù)是升序的一種寫法:
function compare(value1,value2){
    if(value1

對于數(shù)值類型或者其valueOf()方法會返回數(shù)值類型的對象類型,可以使用一個更簡單的比較函數(shù)。

//從小到大排列
    var arr4=[1, 4, 3];
    arr4.sort(function(a, b) {
        return a - b;//ab返回正數(shù),a在b的后面。=》比較大在后面
    });
    console.log(arr4);
    // 輸出: [1, 3, 4]

//從大到小排列
    var arr5=[1, 4, 3];
    arr5.sort(function(a, b) {
            return b - a;
    });
    console.log(arr5);
    // 輸出: [4, 3, 1]

由于比較函數(shù)通過返回一個小于零,等于零或大于零的值來影響排序,因此減法操作就可以適當?shù)奶幚硭羞@些情況。
字符串比較規(guī)則:

比較的時候,從字符串左邊開始,一次比較每個字符,直接出現(xiàn)差異、或者其中一個串結(jié)束為止。
比如ABC與ACDE比較,第一個字符相同,繼續(xù)比較第二個字符,由于第二個字符是后面一個串大,所以不再繼續(xù)比較,結(jié)果就是后面?zhèn)€串大。
再如ABC與ABC123比較,比較三個字符后第一個串結(jié)束,所以就是后面一個串大。
所以,長度不能直接決定大小,字符串的大小是由左邊開始最前面的字符決定的。

這里比較坑的是筆者竟然對如何通過返回值來實現(xiàn)升序和降序想不明白了,后來經(jīng)過分析終于理解了。大神們可以自行略過.
思考過程如下。

(1)return a - b;
//ab返回正數(shù),a在b的后面。=>比較大在后面
(2)return b - a;
//ba返回正數(shù),b在a的后面。=>比較小在后面

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/90967.html

相關(guān)文章

  • js數(shù)組詳解

    摘要:將對原來的數(shù)組進行反轉(zhuǎn),并返回改變后的數(shù)組,其會改變原數(shù)組的值。一個參數(shù)時返回該參數(shù)指定的位置到當前數(shù)組末尾的所有項。對數(shù)組的每一項運行給定的函數(shù),沒有返回值。測試有過濾篩選的含義,接收一個有返回值為弱的函數(shù),最后返回一個過濾后的新數(shù)組。 數(shù)組初認識 Array是js中的引用數(shù)據(jù)類型,除了Object外,Array幾乎是ECMAScript中最常用的數(shù)據(jù)類型了。 js中的數(shù)組與其他語言...

    dmlllll 評論0 收藏0
  • 詳解數(shù)組(Array)引用類型

    摘要:例如,會刪除數(shù)組中的前兩項。插入的項數(shù)不必與刪除的項數(shù)相等。這兩個方法都接收兩個參數(shù)要查找的項和可選的表示查找起點位置的索引。對數(shù)組中的每一項運行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。 除Object類型外,Array是最常用的類型,Array對象與其他語言相比有著自己的不同之處,首先同一數(shù)組對象的不同項可以保存不同類型的數(shù)據(jù),其次數(shù)組對象的長短可以動態(tài)改變. showImg(...

    afishhhhh 評論0 收藏0
  • JavaScript中的Array.prototype.sort方法詳解

    摘要:方法可以接受一個可選的參數(shù),比較回調(diào)函數(shù)。方法會修改原本數(shù)組輸出如上,在調(diào)用方法后,自身數(shù)組被修改。對于長數(shù)組會使用快速排序,而快速排序一般是不穩(wěn)定的。所以方法返回的數(shù)組永遠是該方法認為的升序數(shù)組。 前幾天在某公司面試的時候被問到關(guān)于這個方法的默認值的問題(然而面試官跟我說的其實是錯的,當場我還不夠底氣去反駁)。突然發(fā)現(xiàn)對這個方法的了解還不夠,因此回來查了資料,看了v8引擎的實現(xiàn)和EC...

    Snailclimb 評論0 收藏0
  • 以??簡單易懂??的語言帶你搞懂有監(jiān)督學習算法【附Python代碼詳解】機器學習系列KNN篇

    必須要看的前言 本文風格:以??簡單易懂??的語言帶你徹底搞懂KNN,了解什么是有監(jiān)督學習算法。 認真看完這篇文章,徹底了解KNN、了解監(jiān)督學習算法絕對是一樣很簡單的事情。 注:本篇文章非常詳細,同時我也附加了Python代碼,歡迎收藏后慢慢閱讀。 目錄 必須要看的前言監(jiān)督學習算法KNN/K近鄰算法1 算法原理1.1 實現(xiàn)過程1.2 距離的確定 2 算法的優(yōu)缺點3 算法的變種3.1 變...

    MoAir 評論0 收藏0
  • JavaScript-原生Array對象方法詳解(一)

    摘要:元素是通過指定的分隔符進行分隔的。注意該方法會改變原來的數(shù)組當不帶參數(shù)調(diào)用時,數(shù)組元素按照字母表排序必要時臨時轉(zhuǎn)換為字符串比較。方法用于刪除并返回數(shù)組的最后一個元素。如果數(shù)組已經(jīng)為空,則不改變數(shù)組,并返回值。返回值的本地字符串表示。 1、join() join() 方法用于把數(shù)組中的所有元素轉(zhuǎn)換為一個字符串。元素是通過指定的分隔符進行分隔的。arrayObject.join(separ...

    ls0609 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<