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