摘要:大家都知道,在的數組方法中,有一個方法,可以直接調用對數組進行排序。例如輸出在默認情況下,會按照升序排列數組項,需要注意的是方法會改變原來的數組。注意即使數組中的每一項都是數字,方法比較的也是字串。
大家都知道,在JS的數組方法中,有一個sort()方法,可以直接調用對數組進行排序。例如:
var arr1=[1,5,8,9,7,2]; arr1.sort(); console.log(arr1); // 輸出: [1,2,5,7,8,9]
在默認情況下,sort()會按照升序排列數組項,需要注意的是sort()方法會改變原來的數組。
sort()方法實現排序的原理:
sort()方法會調用每一個數組項的toString()轉型方法,然后比較得到的字符串(字符串的比較規則會在下文中講到),以決定如何排序。注意即使數組中的每一項都是數字,sort()方法比較的也是字串。
var arr2=[1,15,8,9,7,2]; arr2.sort(); console.log(arr2); // 輸出: [1,15,2,7,8,9]
注意:15明明比2要大,卻排在了2的前面,這就是sort()方法調用每一個數組項的toString(),然后比較得到的字符串造成的。
實現理想的的排序:
為了避免上述情況,我們可以向sort()中傳入一個比較函數,根據比較函數的返回值決定是升序排列還是降序排列。
比較函數接收兩個參數:如果第一個參數應該位于第二個參數之前則返回一個負數,如果兩個參數相等,則返回0,否則返回一個正數。
//compare()函數是升序的一種寫法: function compare(value1,value2){ if(value1對于數值類型或者其valueOf()方法會返回數值類型的對象類型,可以使用一個更簡單的比較函數。
//從小到大排列 var arr4=[1, 4, 3]; arr4.sort(function(a, b) { return a - b;//ab返回正數,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]由于比較函數通過返回一個小于零,等于零或大于零的值來影響排序,因此減法操作就可以適當的處理所有這些情況。
字符串比較規則:比較的時候,從字符串左邊開始,一次比較每個字符,直接出現差異、或者其中一個串結束為止。 比如ABC與ACDE比較,第一個字符相同,繼續比較第二個字符,由于第二個字符是后面一個串大,所以不再繼續比較,結果就是后面個串大。 再如ABC與ABC123比較,比較三個字符后第一個串結束,所以就是后面一個串大。 所以,長度不能直接決定大小,字符串的大小是由左邊開始最前面的字符決定的。這里比較坑的是筆者竟然對如何通過返回值來實現升序和降序想不明白了,后來經過分析終于理解了。大神們可以自行略過.
思考過程如下。(1)return a - b; //ab返回正數,a在b的后面。=>比較大在后面 (2)return b - a; //ba返回正數,b在a的后面。=>比較小在后面
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90967.html
摘要:例如,會刪除數組中的前兩項。插入的項數不必與刪除的項數相等。這兩個方法都接收兩個參數要查找的項和可選的表示查找起點位置的索引。對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。 除Object類型外,Array是最常用的類型,Array對象與其他語言相比有著自己的不同之處,首先同一數組對象的不同項可以保存不同類型的數據,其次數組對象的長短可以動態改變. showImg(...
摘要:方法可以接受一個可選的參數,比較回調函數。方法會修改原本數組輸出如上,在調用方法后,自身數組被修改。對于長數組會使用快速排序,而快速排序一般是不穩定的。所以方法返回的數組永遠是該方法認為的升序數組。 前幾天在某公司面試的時候被問到關于這個方法的默認值的問題(然而面試官跟我說的其實是錯的,當場我還不夠底氣去反駁)。突然發現對這個方法的了解還不夠,因此回來查了資料,看了v8引擎的實現和EC...
必須要看的前言 本文風格:以??簡單易懂??的語言帶你徹底搞懂KNN,了解什么是有監督學習算法。 認真看完這篇文章,徹底了解KNN、了解監督學習算法絕對是一樣很簡單的事情。 注:本篇文章非常詳細,同時我也附加了Python代碼,歡迎收藏后慢慢閱讀。 目錄 必須要看的前言監督學習算法KNN/K近鄰算法1 算法原理1.1 實現過程1.2 距離的確定 2 算法的優缺點3 算法的變種3.1 變...
摘要:元素是通過指定的分隔符進行分隔的。注意該方法會改變原來的數組當不帶參數調用時,數組元素按照字母表排序必要時臨時轉換為字符串比較。方法用于刪除并返回數組的最后一個元素。如果數組已經為空,則不改變數組,并返回值。返回值的本地字符串表示。 1、join() join() 方法用于把數組中的所有元素轉換為一個字符串。元素是通過指定的分隔符進行分隔的。arrayObject.join(separ...
閱讀 1661·2021-10-29 13:11
閱讀 825·2021-09-22 10:02
閱讀 1687·2021-08-20 09:35
閱讀 1548·2019-08-30 15:54
閱讀 2457·2019-08-30 15:44
閱讀 1379·2019-08-29 16:52
閱讀 1098·2019-08-23 12:56
閱讀 749·2019-08-22 15:16