摘要:前言做項目的時候發現使用排序后的代碼,在和平臺解析的結果不一樣。而根據規范,通過可以推測出,顯然這里互相矛盾反之亦然的情況。
前言:做項目的時候發現使用sort排序后的代碼,在android和ios平臺解析的結果不一樣。
1、先從簡單的開始,大家都知道sort()函數比較的是ASCII碼的大小,而且而且而且:Array的sort()方法默認把所有元素先轉換為String再排序,所以就有以下問題。
// baiDu排在了最后: ["Google", "baiDu", "Facebook"].sort(); // ["Facebook", "Google", "baiDu"] // 無法理解的結果: [10, 20, 1, 2].sort(); // [1, 10, 2, 20]
結果轉換成字符串比較,"10"排在了"2"的前面,因為字符"1"比字符"2"的ASCII碼小
2、使用回調函數的錯誤
[10, 2, 3, 100, 6, 9].sort((a, b) => { return a < b; }); // 無法理解的結果 [10, 2, 3, 100, 6, 9]
排序前后結果沒有變化
問題分析:
在sort實現的規范中有這么一條 sortFun(a,b) === 0,則有 a === b 且 b === a 。
此時我們再看var sortFun = (a, b) => a < b,它等同于var sortFun = (a, b) => a < b ? 1 : 0。
它有一個隱藏的漏洞:當a >= b時,sortFun(a,b) === 0。而根據規范,通過sortFun(a,b) === 0可以推測出a === b,顯然這里互相矛盾, 反之亦然(a > b的情況)。
所以比較的時候最好使用 a - b 或者 b - a
正確寫法:
[10, 2, 3, 100, 6, 9].sort((a, b) => { return a - b; }); // 結果 [2, 3, 6, 9, 10, 100]
android 和 ios平臺解析的sort函數實現方式不同,不規范的寫法可能導致解析結果不同
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101458.html
摘要:方法可以接受一個可選的參數,比較回調函數。方法會修改原本數組輸出如上,在調用方法后,自身數組被修改。對于長數組會使用快速排序,而快速排序一般是不穩定的。所以方法返回的數組永遠是該方法認為的升序數組。 前幾天在某公司面試的時候被問到關于這個方法的默認值的問題(然而面試官跟我說的其實是錯的,當場我還不夠底氣去反駁)。突然發現對這個方法的了解還不夠,因此回來查了資料,看了v8引擎的實現和EC...
摘要:然而有時候的結果和預期結果還是有些差異的。中文的可以通過來獲取。啊次比例中毓比侊啊比侊比例次毓中當然和允許傳入參數指定,有興趣的可以去上看看用法。對于中文或者需要本地化比較的場景下,可以使用或者來進行比較。 大家都知道 js 自帶了一個排序方法 sort,很多時候需要排序的時候也都直接使用了 sort 方法來排序。然而有時候 sort 的結果和預期結果還是有些差異的。 看下面的代碼 [...
摘要:元素是通過指定的分隔符進行分隔的。注意該方法會改變原來的數組當不帶參數調用時,數組元素按照字母表排序必要時臨時轉換為字符串比較。方法用于刪除并返回數組的最后一個元素。如果數組已經為空,則不改變數組,并返回值。返回值的本地字符串表示。 1、join() join() 方法用于把數組中的所有元素轉換為一個字符串。元素是通過指定的分隔符進行分隔的。arrayObject.join(separ...
摘要:函數作為參數情況,,和是中內置的高階函數。知道了到底啊什么是高階函數,有哪些類型的高階函數。公眾號技術棧路線大家好,我是,公眾號程序員成長指北作者,這篇文章是必知必會系列的高階函數講解。 前言 一道經典面試題: //JS實現一個無限累加的add函數 add(1) //1 add(1)(2) //3 add(1)(2)(3) //6 當大家看到這個面試題的時候,能否在第一時間想到...
摘要:發現的問題是字符串比較引起的。而在第二版的返回值是與,對應的是和。字符串比較是一個一個字符進行比較中方法的比較函數返回值正值,負值,的含義 前言 前幾天使用JavaScript中Array的sort排序字符串,發現排序不準確,這里記一下。 第一版 var arr = [0, 1, 11, 11, 2, 12, 123, 123, 333, 5]; // 第一個版本 arr.sort(...
閱讀 2265·2021-09-27 13:35
閱讀 561·2019-08-30 15:55
閱讀 810·2019-08-30 15:53
閱讀 555·2019-08-30 15:52
閱讀 2146·2019-08-30 12:59
閱讀 2269·2019-08-29 16:42
閱讀 1385·2019-08-26 18:26
閱讀 2467·2019-08-26 13:48