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

資訊專欄INFORMATION COLUMN

模擬JavaScript的Array.sort()方法

liuyix / 3429人閱讀

摘要:下面重新改寫上面的冒泡排序,傳遞一個回調(diào)函數(shù)。模擬注意第行和第行,給傳遞了一個參數(shù),這是一個函數(shù),然后在第行調(diào)用,和分別就是回調(diào)函數(shù)的兩個比較值。

在JavaScript中,Array對象的sort()方法是用來排序的,但是這個方法在默認情況下可能不是我們想要的,比如對于如下數(shù)組

var arr = [2,5,10,20,7,15];

使用sort排序會得到如下結果:
[10, 15, 2, 20, 5, 7]

在不傳遞參數(shù)的情況下,它是按字符的Unicode編碼來排序的。

為了解決這個問題,可以為sort()方法傳遞一個參數(shù),這個參數(shù)ECMAScript是這么定義的:

/**
@param {function} [compareFn]
@return {Array.}
*/
Array.prototype.sort = function(compareFn) {};

參數(shù)為一個function,具體叫比較函數(shù)。我們可以改寫為如下形式,傳遞一個比較函數(shù):

arr.sort(function(a,b){
    return a - b;
});

a和b即是要比較的兩個數(shù),其返回值如下:

若 a 小于 b,在排序后的數(shù)組中 a 應該出現(xiàn)在 b 之前,則返回一個小于 0 的值。

若 a 等于 b,則返回 0。

若 a 大于 b,則返回一個大于 0 的值。

對于返回值的三種結果,我們可以直接使用“a-b”,這樣就可以正確得到結果
[2, 5, 7, 10, 15, 20]

那么,接下來我們就來模擬一下這個方法和比較函數(shù)的實現(xiàn)。

首先,如果我們不用這個方法,而是自己實現(xiàn)排序,那么我們可以使用傳統(tǒng)的冒泡排序方法:

function sort(array){
        for(var i=0; i array[j + 1]){
                    var temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    // 還有比較,說明排序還未結束
                    isSorted = false;
                }
            }
            // 如果排序已經(jīng)完成,跳出循環(huán)
            if(isSorted){
                break;
            }
        }
    }

這是一個循環(huán)次數(shù)最少的排序方法,但是,這個排序的適應性不強,對于字符串數(shù)組就不行了,假設有如下字符串數(shù)組,要求按字符串個數(shù)排序該如何實現(xiàn)?

var arry = ["aaa","aa","c","bb"."xxxxxxxx"];

這樣的數(shù)組我們不得不重新寫一個方法來對字符串數(shù)組進行排序,需要改動上面冒泡排序的第6行的判斷條件:

if(array[j].length > array[j+1].length){}

那么,既然只需要改動這一句,我們可以把這一句作為參數(shù)傳遞,以后想怎么排就傳什么樣的參數(shù),這個參數(shù)就是一個函數(shù),回調(diào)函數(shù)。下面重新改寫上面的冒泡排序,傳遞一個回調(diào)函數(shù)。

// 模擬sort()
function sort(array,fn){
    for(var i=0; i 0){
                var temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
                    isSorted = false;
                }
            }
        }
        if(isSorted){
           break;
        }
    }
}

注意第2行和第6行,給sort傳遞了一個fn參數(shù),這是一個函數(shù),然后在第6行調(diào)用,array[j]和array[j+1]分別就是回調(diào)函數(shù)的a,b兩個比較值。用這個改寫的方法即可對數(shù)值數(shù)組排序也可以對字符串數(shù)組排序了。

var arr = ["aaa","a","xxxxxx","abcd","ab"];
sort(arr, function (a,b) {
    return a.length - b.length;
});
console.log(arr);

輸出:["a", "ab", "aaa", "abcd", "xxxxxx"]

文章首發(fā)于讀你博客,原文鏈接http://www.mybry.com/?p=594,轉載請注明出處

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79949.html

相關文章

  • JS專題之數(shù)組去重

    摘要:將元素作為對象的鍵,默認鍵對應的值為如果對象中沒有這個鍵,則將這個元素放入結果數(shù)組中去。 前言 數(shù)組去重在日常開發(fā)中的使用頻率還是較高的,也是網(wǎng)上隨便一抓一大把的話題,所以,我寫這篇文章目的在于歸納和總結,既然很多人都在提的數(shù)組去重,自己到底了解多少呢。又或者是如果自己在開發(fā)中遇到了去重的需求,自己能想到更好的解決方案嗎。 這次我們來理一理怎么做數(shù)組去重才能做得最合適,既要考慮兼容性,...

    only_do 評論0 收藏0
  • Javascript數(shù)組系列四之數(shù)組轉換與排序Sort方法

    摘要:總結我們繼續(xù)了我們數(shù)組系列的文章的,今天我們主要說的就是數(shù)組的如何轉換成其他數(shù)據(jù)類型,以及數(shù)組如何按照我們自己的規(guī)則去進行排序。 今天我們繼續(xù)來介紹 Javascirpt 數(shù)組中的方法,也是數(shù)組系列的第四篇文章,因為數(shù)組的方法眾多,每篇文章我們都對數(shù)組的每個方法都有比較細致的描述,只要你能夠從中成長一點點,那我們的目的就達到了,學習是一個持續(xù)的,漸進的過程。每天進步一點點,最終會有大成...

    zhonghanwen 評論0 收藏0
  • JavaScript引用類型——“Array類型”注意要點

    摘要:創(chuàng)建數(shù)組讀取和設置數(shù)組的值創(chuàng)建數(shù)組創(chuàng)建數(shù)組的基本方式有兩種使用構造函數(shù)使用數(shù)組字面量表示法對于第一種方法,如果知道數(shù)組要保存多少個項目,也可以給構造函數(shù)傳遞參數(shù),比如要創(chuàng)建值為的數(shù)組操作符可以省略。也可以向構造函數(shù)傳遞包含的項。 Array 類型 除了Object 之外,Array 類型也是相當常用的類型了。ECMAScript 數(shù)組的每一項可以保存任何類型的數(shù)據(jù)。且數(shù)組大小也能夠動態(tài)...

    AlphaWatch 評論0 收藏0
  • [筆記] 深入理解 JavaScript Array.sort()

    摘要:以上涉及到一個字符的轉換問題,這里不多擴展,寫一段代碼運行過程做筆記中國代表字符中的第一位,是只有長度的字符輸出字符長度為不確定時放入一個數(shù)組中。第一次運行后,返回值為,小于,所以的索引值未變化,。 Array.sort() 方法排序,默認為升序排序,如 1,2,3,4 這樣的排列,可以傳一個對比方法做為排序的參數(shù),也可以不傳,則為按照字符的逐個 unicode 排序。 簡單默認排序 ...

    QLQ 評論0 收藏0
  • Javascript內(nèi)置函數(shù)(ES5)-讀Javascript語言精粹

    摘要:的內(nèi)置函數(shù)整理了一些語言精粹的方法一章的整理出的的內(nèi)置方法之后還會整理標準入門的新添加的方法整理這些作用一方面是更好的理解記憶另一方面是對于類數(shù)組可以使用原型鏈的調(diào)用即可中的一些函數(shù)輸出的為的結果因此的作用是連接數(shù)組當然可以是數(shù)字也會加入到 Javascript的內(nèi)置函數(shù)(ES5) 整理了一些Javascript語言精粹的方法一章的整理出的ES5的內(nèi)置方法; 之后還會整理ES6標準入門...

    gekylin 評論0 收藏0

發(fā)表評論

0條評論

liuyix

|高級講師

TA的文章

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