var a = [33, 4, 1111, 222];a.sort(  );               // Alphabetical order:  1111, 222, 33, 4a.sort(function(a,b) {    // Numerical order: 4, 33, 222, 1111           return a-b;    // Returns < 0, 0, or > 0, depending on order       }); 
function(a,b) 是个比较函数,它的功能是如何实现的?请高手讲讲,好吗

解决方案 »

  1.   

    a,b是需要比较的两个参量,这个函数如果返回大于0的结果,那么sort方法会将它们在数组中的位置互换。
    默认a.sort()会按从小到大排序,如果想要从大到小排序,则a.sort(function(a,b){return b-a})是一种方法。
      

  2.   

    function(a, b)是一个匿名方法 方法体是return a - b;
    把这个方法作为排序的方法传递给sort()
      

  3.   

    乱写了一下,我觉的这样的思路应该可以。Array.prototype.sort(fun){
    for(var i=0;i<this.length;i++){
    for(var j=i+1;j<this.length;j++){
    if(fun(this[i],this[j])>0)
    this.swap(i,j);//交换数组中i和j位置上的值
    }
    }
    }
      

  4.   

    你运行一下,试试Array.prototype.sort=function(fun){
    for(var i=0;i<this.length;i++){
    for(var j=i+1;j<this.length;j++){
    if(fun(this[i],this[j])>0)
    this.swap(i,j);//交换数组中i和j位置上的值
    }
    }
    return this;
    }
    Array.prototype.swap=function(i,j){
    var b=this[i];
    this[i]=this[j];
    this[j]=b;
    }var o=[3,2,1]
    var os=o.sort(function(a,b){return b-a});
    alert(os)
      

  5.   

                if(fun(this[i],this[j])>0)
                    this.swap(i,j);//交换数组中i和j位置上的值
    里改成
                if(fun(this[i],this[j])<0)
                    this.swap(i,j);//交换数组中i和j位置上的值
      

  6.   

    楼上的哥们,把天给捅破了,好厉害啊
    源码揭秘啊 ,指出了array的sort/swap 函数的定义源码,谢谢。