分享

javascript 数组对象根据指定属性排序

 CevenCheng 2012-05-24
javascript 数组对象根据指定属性排序

关于数组排序马上会想到sort方法,或者reverse方法 但是后者只是简单的逆序而已不能满足大部分需求。

前者功能强大便于扩展,该方法有一个自定义排序函数,一般而言针对数字或者同类型不复杂元素很容易进行自定义排序函数,该函数有两个参数:

比如数组var arr=[2,3,5,1,4] ; 需要升序排列,我们可以这样:

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

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

但是如果遇到复杂的数组元素,比如:       

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

数组中含有对象对象中有许多属性,如何根据属性排序呢?

这时候就要重写排序规则函数了,可是该函数只接受两个参数,如何才能根据特定属性排序呢,比如这里的age,name

 

熟悉函数特性的都知道,函数在javascript中不同于其他语言,函数是对象,函数中可以返回函数,因此可以在外函数中传入属性,内函数接收两个参数,比如这里的数组中对象元素。

实现如下:

  //自定义排序函数,传入属性,返回接收两个参数的排序函数
        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")); //根据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")); //根据age排序   
        for (var i = 0, ilen = data.length; i < ilen; i++)
        {
            document.write(data[i].name + ":" + data[i].age, "</br>");
        }

 

效果如下:


 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多