sort函数是系统级,而且没参数控制排序,光靠这个函数就别想了
如果想自定义排序方式参考网络上流行的排序算法来实现吧

解决方案 »

  1.   


    <script type="text/javascript">
    var a = [

    { n : 1, v : "a1" }, { n : 1, v : "a2" }, { n : 2, v : "b1" }, { n : 0, v : "z1" }

    ];a.sort(function (a, b) { return a.n - b.n; });
    a.sort(function (a, b) { return a.n - b.n; });alert(a[1].v);
    </script>
      

  2.   

    楼上的,调两次a.sort(function (a, b) { return a.n - b.n; });有什么作用?to SonicX ,有没有好的介绍一个,现在被这个东西搞的头痛。谢谢
      

  3.   

    调一次两次都行啊
    我随手放上的那个
    你在函数里设置返回0就不会有变动的
    a.sort(function (a, b) { return 0; });
    你可以测试下这个
      

  4.   

    我用这个来排序:
    <script>
    o="也不为过,A,B,Q,Z,abort,apple,bp,b土,d,o,something,上世纪,上世纪,五月天,刘德华,aPPel,A,a,DD,斤斤计较,dd,EE,ee,EF,ef,Eo,eA,Eq,eZ,地区性,张学友,张韶涵,B,b,C,c,手语,是上,苹果,范玮琪,阿桑,香蕉,(,},#"
    document.write("<p>原字符</p>"+o);
    o=o.split(',').sort(function(a,b){return a.localeCompare(b)});
    document.write("<p>排序后</p>"+o);
    </script>
      

  5.   

    /**
     * quickSort method
     */
    quickSort:function(arr,p,r) {
        if (p < r) {
            var q = Notice.partition(arr,p,r);
        Notice.quickSort(arr,p,q-1);
        Notice.quickSort(arr,q+1,r);
    }
    },
    partition:function(arr,p,r) {
        var i = p;
        var j = r + 1;
        var x = arr[p];
        while (true) {
            while (i < r && arr[++i].endOffset < x.endOffset);
            while (j > 0 && arr[--j].endOffset > x.endOffset);
            if (i >= j) break;
            var temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        arr[p] = arr[j];
        arr[j] = x;
        return j;
    },
      

  6.   

    我想你的意思是好像楼上 muxrwc 说的那样,两个对象n属性一样,然而a属性不同,排序后却出现了a属性顺序颠倒了的情况。这是你无法解决的问题,因为系统内部的快速排序算法仅考虑你要比较的属性,也就是n属性,然而快速排序算法本身的特性决定了等大元素的结果顺序不一定和原先的顺序一致。如果你一定要一致,自己写一个排序算法吧,以确保顺序的一致性。
      

  7.   

    我在sort方法里定义当两个值相等的时候返回0,这样处理后在IE下是没有问题了,可是在Firefox下还是不稳定,下面是sort方法的代码,
    function descSort(a, b)
    {
    //解析超连接的内容
    var startA = a[sortColNum].indexOf(">") >= 0 ? a[sortColNum].indexOf(">") + 1 : 0;
    var endA = a[sortColNum].lastIndexOf("<") >= 0 ? a[sortColNum].lastIndexOf("<") : a[sortColNum].length;
    var startB = b[sortColNum].indexOf(">") >= 0 ? b[sortColNum].indexOf(">") + 1 : 0;
    var endB = b[sortColNum].lastIndexOf("<") >= 0 ? b[sortColNum].lastIndexOf("<") : b[sortColNum].length;
    if(sortMethod[sortColNum] == "num")//数字排序
    {
    return -( parseFloat(a[sortColNum].substring(startA, endA)) - parseFloat(b[sortColNum].substring(startB, endB)));
    }
    else if (sortMethod[sortColNum] == "str")//字符串排序
    {
    //alert(a[sortColNum].substring(startA, endA));
    if (a[sortColNum].substring(startA, endA) ==  b[sortColNum].substring(startB, endB))
    {
    return 0;
    }
    else
    {
    return ( a[sortColNum].substring(startA, endA) <  b[sortColNum].substring(startB, endB) ? 1 : -1);
    }
    }
    }