js数组的sort排序详解

代码:javascript

<body>
    <div>
    sort()对数组排序,不开辟新的内存,对原有数组元素进行调换
    </div>
    <div id="showBox">
    一、简单数组简单排序
    <script type="text/javascript">
        var arrSimple=new Array(1,8,7,6);
        arrSimple.sort();
        document.writeln(arrSimple.join());
    </script>
    </div>
    <div>
    二、简单数组自定义排序
    <script type="text/javascript">
        var arrSimple2=new Array(1,8,7,6);
        arrSimple2.sort(function(a,b){
            return b-a});
        document.writeln(arrSimple2.join());
    </script>
    解释:a,b表示数组中的任意两个元素,若return > 0 b前a后;reutrn < 0 a前b后;a=b时存在浏览器兼容
    简化一下:a-b输出从小到大排序,b-a输出从大到小排序。
    </div>
    <div>
    三、简单对象List自定义属性排序
    <script type="text/javascript">
        var objectList = new Array();
        function Persion(name,age){
            this.name=name;
            this.age=age;
            }
        objectList.push(new Persion('jack',20));
        objectList.push(new Persion('tony',25));
        objectList.push(new Persion('stone',26));
        objectList.push(new Persion('mandy',23));
        //按年龄从小到大排序
        objectList.sort(function(a,b){
            return a.age-b.age
        });
        for(var i=0;i<objectList.length;i++){
            document.writeln('<br />age:'+objectList[i].age+' name:'+objectList[i].name);
        }
    </script>
    </div>
    <div>
    四、简单对象List对可编辑属性的排序
    <script type="text/javascript">
        var objectList2 = new Array();
        function WorkMate(name,age){
            this.name=name;
            var _age=age;
            this.age=function(){
                if(!arguments)
                {
                    _age=arguments[0];}
                else
                {
                    return _age;}
                }
                
            }
        objectList2.push(new WorkMate('jack',20));
        objectList2.push(new WorkMate('tony',25));
        objectList2.push(new WorkMate('stone',26));
        objectList2.push(new WorkMate('mandy',23));
        //按年龄从小到大排序
        objectList2.sort(function(a,b){
            return a.age()-b.age();
        });
        for(var i=0;i<objectList2.length;i++){
            document.writeln('<br />age:'+objectList2[i].age()+' name:'+objectList2[i].name);
        }
    </script>
    5.动态的根据数据排序
    var data = [{name:'tom',age:'28'},{name:'cat',age:'29'}];
    function createCompact(field){
        return function(object1,object2){
             var value1 = object1[field];
             var value2 = object2[field];
             if(value1 < value2){
                  return -1;
             }else if(value1 > value2){
                  return 1;
             }else{
                  return 0;
             }
        }
    };
    data.sort(createCompact('name'));
    6.对Object数组排序的其余写法:
    //定义一个比较器 
    function keysrt(key,desc) {
	      return function(a,b){
		     return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);
	      }
    }
	//应用场景:
    var ary=[{id:1,name:"b"},{id:2,name:"b"}];
    ary.sort(keysrt('name',true));
    ary.sort(keysrt('name',false));
    ary.sort(keysrt('id',false));
    </div>
</body>

知识点:java

1,sort(function(a,b){return a-b;})对传入的一对值进行比较,而后返回的的值为:小于0,大于0,等于0;(大于0交换位置,反之则不)数组

  * 当小于0时,说明b>a,故b的排序靠后(即不变,觉得默认按升序排序).浏览器

  * 当大于0时,说明a>b,故a的排序靠后(由于默认按照升序排序,若是a>b,因此a要排在b的后面).this

  * 当等于0时,说明a=b,故不改变排序.code

若是对数值数组的值进行降序排序。那么只要把返回的值改成b-a!对象

相关文章
相关标签/搜索