摘要:大家都知道,在的數(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
摘要:將對原來的數(shù)組進行反轉(zhuǎn),并返回改變后的數(shù)組,其會改變原數(shù)組的值。一個參數(shù)時返回該參數(shù)指定的位置到當前數(shù)組末尾的所有項。對數(shù)組的每一項運行給定的函數(shù),沒有返回值。測試有過濾篩選的含義,接收一個有返回值為弱的函數(shù),最后返回一個過濾后的新數(shù)組。 數(shù)組初認識 Array是js中的引用數(shù)據(jù)類型,除了Object外,Array幾乎是ECMAScript中最常用的數(shù)據(jù)類型了。 js中的數(shù)組與其他語言...
摘要:例如,會刪除數(shù)組中的前兩項。插入的項數(shù)不必與刪除的項數(shù)相等。這兩個方法都接收兩個參數(shù)要查找的項和可選的表示查找起點位置的索引。對數(shù)組中的每一項運行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。 除Object類型外,Array是最常用的類型,Array對象與其他語言相比有著自己的不同之處,首先同一數(shù)組對象的不同項可以保存不同類型的數(shù)據(jù),其次數(shù)組對象的長短可以動態(tài)改變. showImg(...
摘要:方法可以接受一個可選的參數(shù),比較回調(diào)函數(shù)。方法會修改原本數(shù)組輸出如上,在調(diào)用方法后,自身數(shù)組被修改。對于長數(shù)組會使用快速排序,而快速排序一般是不穩(wěn)定的。所以方法返回的數(shù)組永遠是該方法認為的升序數(shù)組。 前幾天在某公司面試的時候被問到關(guān)于這個方法的默認值的問題(然而面試官跟我說的其實是錯的,當場我還不夠底氣去反駁)。突然發(fā)現(xiàn)對這個方法的了解還不夠,因此回來查了資料,看了v8引擎的實現(xiàn)和EC...
必須要看的前言 本文風格:以??簡單易懂??的語言帶你徹底搞懂KNN,了解什么是有監(jiān)督學習算法。 認真看完這篇文章,徹底了解KNN、了解監(jiān)督學習算法絕對是一樣很簡單的事情。 注:本篇文章非常詳細,同時我也附加了Python代碼,歡迎收藏后慢慢閱讀。 目錄 必須要看的前言監(jiān)督學習算法KNN/K近鄰算法1 算法原理1.1 實現(xiàn)過程1.2 距離的確定 2 算法的優(yōu)缺點3 算法的變種3.1 變...
摘要:元素是通過指定的分隔符進行分隔的。注意該方法會改變原來的數(shù)組當不帶參數(shù)調(diào)用時,數(shù)組元素按照字母表排序必要時臨時轉(zhuǎn)換為字符串比較。方法用于刪除并返回數(shù)組的最后一個元素。如果數(shù)組已經(jīng)為空,則不改變數(shù)組,并返回值。返回值的本地字符串表示。 1、join() join() 方法用于把數(shù)組中的所有元素轉(zhuǎn)換為一個字符串。元素是通過指定的分隔符進行分隔的。arrayObject.join(separ...
閱讀 1675·2021-10-29 13:11
閱讀 842·2021-09-22 10:02
閱讀 1699·2021-08-20 09:35
閱讀 1564·2019-08-30 15:54
閱讀 2468·2019-08-30 15:44
閱讀 1392·2019-08-29 16:52
閱讀 1107·2019-08-23 12:56
閱讀 766·2019-08-22 15:16