国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript sort() 排序的坑詳解

ispring / 1401人閱讀

摘要:前言做項目的時候發現使用排序后的代碼,在和平臺解析的結果不一樣。而根據規范,通過可以推測出,顯然這里互相矛盾反之亦然的情況。

前言:做項目的時候發現使用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

相關文章

  • JavaScript中的Array.prototype.sort方法詳解

    摘要:方法可以接受一個可選的參數,比較回調函數。方法會修改原本數組輸出如上,在調用方法后,自身數組被修改。對于長數組會使用快速排序,而快速排序一般是不穩定的。所以方法返回的數組永遠是該方法認為的升序數組。 前幾天在某公司面試的時候被問到關于這個方法的默認值的問題(然而面試官跟我說的其實是錯的,當場我還不夠底氣去反駁)。突然發現對這個方法的了解還不夠,因此回來查了資料,看了v8引擎的實現和EC...

    Snailclimb 評論0 收藏0
  • JS 中 Array.sort 的那些事兒

    摘要:然而有時候的結果和預期結果還是有些差異的。中文的可以通過來獲取。啊次比例中毓比侊啊比侊比例次毓中當然和允許傳入參數指定,有興趣的可以去上看看用法。對于中文或者需要本地化比較的場景下,可以使用或者來進行比較。 大家都知道 js 自帶了一個排序方法 sort,很多時候需要排序的時候也都直接使用了 sort 方法來排序。然而有時候 sort 的結果和預期結果還是有些差異的。 看下面的代碼 [...

    Sike 評論0 收藏0
  • JavaScript-原生Array對象方法詳解(一)

    摘要:元素是通過指定的分隔符進行分隔的。注意該方法會改變原來的數組當不帶參數調用時,數組元素按照字母表排序必要時臨時轉換為字符串比較。方法用于刪除并返回數組的最后一個元素。如果數組已經為空,則不改變數組,并返回值。返回值的本地字符串表示。 1、join() join() 方法用于把數組中的所有元素轉換為一個字符串。元素是通過指定的分隔符進行分隔的。arrayObject.join(separ...

    ls0609 評論0 收藏0
  • 【JS必知必會】高階函數詳解與實戰

    摘要:函數作為參數情況,,和是中內置的高階函數。知道了到底啊什么是高階函數,有哪些類型的高階函數。公眾號技術棧路線大家好,我是,公眾號程序員成長指北作者,這篇文章是必知必會系列的高階函數講解。 前言 一道經典面試題: //JS實現一個無限累加的add函數 add(1) //1 add(1)(2) //3 add(1)(2)(3) //6 當大家看到這個面試題的時候,能否在第一時間想到...

    李昌杰 評論0 收藏0
  • 記數組sort方法與字符串比較引起的Bug

    摘要:發現的問題是字符串比較引起的。而在第二版的返回值是與,對應的是和。字符串比較是一個一個字符進行比較中方法的比較函數返回值正值,負值,的含義 前言 前幾天使用JavaScript中Array的sort排序字符串,發現排序不準確,這里記一下。 第一版 var arr = [0, 1, 11, 11, 2, 12, 123, 123, 333, 5]; // 第一個版本 arr.sort(...

    wendux 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<