成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

daryl / 2036人閱讀

摘要:大家都知道,在的數(shù)組方法中,有一個(gè)方法,可以直接調(diào)用對(duì)數(shù)組進(jìn)行排序。例如輸出在默認(rèn)情況下,會(huì)按照升序排列數(shù)組項(xiàng),需要注意的是方法會(huì)改變?cè)瓉?lái)的數(shù)組。注意即使數(shù)組中的每一項(xiàng)都是數(shù)字,方法比較的也是字串。

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

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

在默認(rèn)情況下,sort()會(huì)按照升序排列數(shù)組項(xiàng),需要注意的是sort()方法會(huì)改變?cè)瓉?lái)的數(shù)組。
sort()方法實(shí)現(xiàn)排序的原理:
sort()方法會(huì)調(diào)用每一個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法,然后比較得到的字符串(字符串的比較規(guī)則會(huì)在下文中講到),以決定如何排序。注意即使數(shù)組中的每一項(xiàng)都是數(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)用每一個(gè)數(shù)組項(xiàng)的toString(),然后比較得到的字符串造成的。
實(shí)現(xiàn)理想的的排序:
為了避免上述情況,我們可以向sort()中傳入一個(gè)比較函數(shù),根據(jù)比較函數(shù)的返回值決定是升序排列還是降序排列。
比較函數(shù)接收兩個(gè)參數(shù):如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)參數(shù)之前則返回一個(gè)負(fù)數(shù),如果兩個(gè)參數(shù)相等,則返回0,否則返回一個(gè)正數(shù)。

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

對(duì)于數(shù)值類型或者其valueOf()方法會(huì)返回?cái)?shù)值類型的對(duì)象類型,可以使用一個(gè)更簡(jiǎn)單的比較函數(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ù)通過(guò)返回一個(gè)小于零,等于零或大于零的值來(lái)影響排序,因此減法操作就可以適當(dāng)?shù)奶幚硭羞@些情況。
字符串比較規(guī)則:

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/90967.html

相關(guān)文章

  • js數(shù)組詳解

    摘要:將對(duì)原來(lái)的數(shù)組進(jìn)行反轉(zhuǎn),并返回改變后的數(shù)組,其會(huì)改變?cè)瓟?shù)組的值。一個(gè)參數(shù)時(shí)返回該參數(shù)指定的位置到當(dāng)前數(shù)組末尾的所有項(xiàng)。對(duì)數(shù)組的每一項(xiàng)運(yùn)行給定的函數(shù),沒(méi)有返回值。測(cè)試有過(guò)濾篩選的含義,接收一個(gè)有返回值為弱的函數(shù),最后返回一個(gè)過(guò)濾后的新數(shù)組。 數(shù)組初認(rèn)識(shí) Array是js中的引用數(shù)據(jù)類型,除了Object外,Array幾乎是ECMAScript中最常用的數(shù)據(jù)類型了。 js中的數(shù)組與其他語(yǔ)言...

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

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

    afishhhhh 評(píng)論0 收藏0
  • JavaScript中的Array.prototype.sort方法詳解

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

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

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

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

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

    ls0609 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<