小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

javascript 數(shù)組對象根據(jù)指定屬性排序

 CevenCheng 2012-05-24
javascript 數(shù)組對象根據(jù)指定屬性排序

關(guān)于數(shù)組排序馬上會想到sort方法,或者reverse方法 但是后者只是簡單的逆序而已不能滿足大部分需求。

前者功能強(qiáng)大便于擴(kuò)展,該方法有一個自定義排序函數(shù),一般而言針對數(shù)字或者同類型不復(fù)雜元素很容易進(jìn)行自定義排序函數(shù),該函數(shù)有兩個參數(shù):

比如數(shù)組var arr=[2,3,5,1,4] ; 需要升序排列,我們可以這樣:

function Compare(va1,va2){ return va2-va1;} 

arr.sort(Compare);        alert(arr);最后輸出1,2,3,4,5

但是如果遇到復(fù)雜的數(shù)組元素,比如:       

 var data = [{ name: "jiang", age: 23 }, { name: "zheng", age: 18 }, { name: "baidu", age: 8 }, { name: "javascript", age: 19}];

數(shù)組中含有對象對象中有許多屬性,如何根據(jù)屬性排序呢?

這時候就要重寫排序規(guī)則函數(shù)了,可是該函數(shù)只接受兩個參數(shù),如何才能根據(jù)特定屬性排序呢,比如這里的age,name

 

熟悉函數(shù)特性的都知道,函數(shù)在javascript中不同于其他語言,函數(shù)是對象,函數(shù)中可以返回函數(shù),因此可以在外函數(shù)中傳入屬性,內(nèi)函數(shù)接收兩個參數(shù),比如這里的數(shù)組中對象元素。

實現(xiàn)如下:

  //自定義排序函數(shù),傳入屬性,返回接收兩個參數(shù)的排序函數(shù)
        function createComparsionFunction(propertyName)
        {
            return function(object1, object2)
            {
                var value1 = object1[propertyName];
                var value2 = object2[propertyName];
                if (value1 < value2)
                {
                    return -1;
                } else if (value1 > value2)
                {
                    return 1;
                } else
                {
                    return 0;
                }
            }
        }
        var data = [{ name: "zheng", age: 5 }, { name: "jiang", age: 18 }, { name: "google", age: 11 }, { name: "javascript", age: 19}];
        document.write("----------------------原始序列-------------------------", "</br>");
        for (var i = 0, ilen = data.length; i < ilen; i++)
        {
            document.write(data[i].name + ":" + data[i].age, "</br>");
        }
        document.write("----------------------age升序-------------------------", "</br>");
        data.sort(createComparsionFunction("age")); //根據(jù)age排序
        for (var i = 0, ilen = data.length; i < ilen; i++)
        {
            document.write(data[i].name + ":" + data[i].age, "</br>");
        }
        document.write("----------------------name升序-------------------------", "</br>");
        data.sort(createComparsionFunction("name")); //根據(jù)age排序   
        for (var i = 0, ilen = data.length; i < ilen; i++)
        {
            document.write(data[i].name + ":" + data[i].age, "</br>");
        }

 

效果如下:


 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多