暈。難道沒有玩Netscape了嗎????拜托幫幫忙啊。小弟急死啦!!!!

解决方案 »

  1.   

    http://www.google.com/search?hl=zh-CN&ie=UTF-8&oe=UTF-8&q=sort+array+javascript&lr=
      

  2.   

    To: lions911(--ASP--ASP.NET--) ,難道你覺得做一個東西出來只有一個東西才支持,這樣的產品你覺得好嗎???加上這也是客戶要求的。
      

  3.   

    我想到一個辦法,就是分三次去讀數組,然后將生成的列表組合新的數組,那么最終數組一定是想要的結果。我的構思如下:
    第一次讀...
    sort_key = 2;
    ar = content1.sort(sort_desc);
    for(v in ar)
      
    在這建立數組1
    //document.write(ar[v]+"<br/>");第二次讀sort_key = 3;
    ar = 數組1.sort(sort_asc);
    for(v in ar)
      
    在這建立數組2
    //document.write(ar[v]+"<br/>");第三次讀....sort_key = 4;
    ar = 數組2.sort(sort_asc);
    for(v in ar)
      document.write(ar[v]+"<br/>");這樣的話應該可以得到想要的列表吧?但我不會建立那兩數組,希望大家幫幫忙吧,先謝了!
      

  4.   

    原先的我给改了一下, 可以在 IE 和 NS6+/Mozilla 下跑了, 不过在二者中结果有些不太一样(别急, 下一贴我给另外一个例子), 另外原来程序为什么不能在 NS 下跑的原因是 ar = content1.sort(sort_desc);, 应该改为 var ar = content1.sort(sort_desc); :P<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title> New Document </title>
    <meta name="Generator" content="EditPlus">
    <meta name="Author" content="">
    <meta name="Keywords" content="">
    <meta name="Description" content="">
    </head>
    <script language="JavaScript">
    <!--
    content1 = new Array();
    content1[0] = new Array("01","aaaaa","46","1","0");
    content1[1] = new Array("02","bbbbb","8","1","1");
    content1[2] = new Array("03","ccccc","10","1","0");
    content1[3] = new Array("04","ddddd","11","2","0");
    content1[4] = new Array("05","eeeee","15","2","0");
    content1[5] = new Array("06","fffff","10","1","0");
    content1[6] = new Array("07","ggggg","20","3","0");
    content1[7] = new Array("08","hhhhh","32","3","0");
    content1[8] = new Array("09","iiiii","41","2","0");
    content1[9] = new Array("10","jjjjj","10","1","0");var sort_key = 0; // 列号
    var ascending = true; //升序/降序function doSort(rowA, rowB){
        var cellA = rowA[sort_key];
    var cellB = rowB[sort_key];
    //sort() 方法调用的函数要求 A>B, 返回 正数, A==B, 返回 0, A<B, 返回 负数
    var polarity = 0 ;
    if (cellA > cellB){
        polarity = 1;
    }else if (cellA == cellB){
        polarity = 0;
    }else{
        polarity = -1;
    }
    //根据升序/降序调整
        polarity = ascending ? polarity : -1*polarity; return polarity;
    }function sort(){
        var ar = content1; sort_key = 2 - 1;    //js 中数组是从 0 开始的
        ascending = false;   //降序
    ar = ar.sort(doSort); sort_key = 3 - 1;
    ascending = true;    //升序
    ar = ar.sort(doSort); sort_key = 4 - 1;
    ascending = true;    //升序
    ar = ar.sort(doSort); //document.write(ar[v]+"<br/>"); document.write("<Table width='50%' border=1>");
    for(v in ar) {
    document.write("<tr>");
        for(var i=0; i<5; i++){
        document.write("<td>"+ar[v][i]+"</td>");
    }
    document.write("<tr>");
    }
    document.write("<Table>");
    }
    //-->
    </script>
    <body onload="sort();"></body>
    </html>
      

  5.   

    这是另外的那个例子, 排序结果在 IE 和 Mozilla 下测试通过, 是一样的
    <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title> New Document </title>
    <meta name="Generator" content="EditPlus">
    <meta name="Author" content="">
    <meta name="Keywords" content="">
    <meta name="Description" content="">
    </head>
    <script language="JavaScript">
    <!--
    content1 = new Array();
    content1[0] = new Array("01","aaaaa","46","1","0");
    content1[1] = new Array("02","bbbbb","8","1","1");
    content1[2] = new Array("03","ccccc","10","1","0");
    content1[3] = new Array("04","ddddd","11","2","0");
    content1[4] = new Array("05","eeeee","15","2","0");
    content1[5] = new Array("06","fffff","10","1","0");
    content1[6] = new Array("07","ggggg","20","3","0");
    content1[7] = new Array("08","hhhhh","32","3","0");
    content1[8] = new Array("09","iiiii","41","2","0");
    content1[9] = new Array("10","jjjjj","10","1","0");var sort_string = ""; //需要排序的列的集合, 以逗号分开, 如果列号前面有负号, 代表DESC排序
                            //例如 3,2,-1 代表按照 第3,2,1列排序, 其中第1列为DESC排序
    //注意列号是从0开始的function doSort(rowA, rowB){
        var keys = sort_string.split(",");
    var nA = "";  //nA 和 nB 保存代表该行在排序中的一个数字, 每位对应 sort_string 中的一列
    var nB = "";  //例如 三个排序自动, sA = 100, sB=000, 那么说明两行比较时第一列 rowA 较大.
    for (var i=0; i<keys.length; i++){
        //获得 sort_string 中的列号, 以及是否DESC排序
            var idx = keys[i];
    var ascending = 1;
    if (idx < 0){
        idx = -1 * idx;
                ascending = -1;
    }
    //比较两行数据中该列的值
            var cellA = rowA[idx];
        var cellB = rowB[idx];
    if (cellA > cellB){
        polarity = 1;
    }else if (cellA == cellB){
    polarity = 0;
    }else{
    polarity = -1;
    }
    polarity = ascending*polarity;
    //确定 nA/nB
    if(polarity>0){
        nA = nA + "1";
    nB = nB + "0";
    }else if(polarity==0){
        nA = nA + "0";
    nB = nB + "0";
    }else{
        nA = nA + "0";
    nB = nB + "1";
    }
    }
    //alert("RowA("+rowA+"):["+nA+"], RowB("+rowB+"):["+nB+"]"); //sort() 方法调用的函数要求 A>B, 返回 正数, A==B, 返回 0, A<B, 返回 负数
    if (nA > nB){
        return 1;
    }else if (nA == nB){
        return 0;
    }else{
        return -1;
    }
    }function sort(){
        sort_string = "3,2,-1";
        var ar = content1.sort(doSort); document.write("<Table width='50%' border=1>");
    for(v in ar) {
    document.write("<tr>");
        for(var i=0; i<5; i++){
        document.write("<td>"+ar[v][i]+"</td>");
    }
    document.write("<tr>");
    }
    document.write("<Table>");
    }
    //-->
    </script>
    <body onload="sort();"></body>
    </html>
      

  6.   

    >>To: lions911(--ASP--ASP.NET--) ,難道你覺得做一個東西出來只有一個東西才支持,這樣的產品你覺得好嗎???说的很好。
      

  7.   

    謝謝glassprogrammer(),我的問題已經解決啦,原來是我的算法寫得有問題,出錯的不是NetScape,是IE。------------------
    sort_key = 2;
    ar = content1.sort(sort_desc);
    sort_key = 3;
    ar = ar.sort(sort_asc);
    sort_key = 4;
    ar = ar.sort(sort_asc);
    for(v in ar)
      document.write(ar[v]+"<br/>");--------------------------------------------------------------
    上面的排序方法,其實根本就沒有按我的要求來做,還是我自己犯了一個低級錯誤,現把正確的方法貼給大家參考參考。(在IE6、NetScape6.21、NetScape7.0、NetScape7.1通過)
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <meta http-equiv="Content-Type" content="text/html; charset=big5">
    <link rel="stylesheet" href="style.css" type="text/css">
    <script language="JavaScript">
    <!--
    content1 = new Array();
    content1[0]  = new Array("aaa","01","46","1","0");
    content1[1]  = new Array("bbb","02","18","1","1");
    content1[2]  = new Array("ccc","03","10","1","0");
    content1[3]  = new Array("ddd","04","10","1","0");
    content1[4]  = new Array("eee","05","15","2","0");
    content1[5]  = new Array("fff","06","17","1","0");
    content1[6]  = new Array("ggg","07","20","3","1");
    content1[7]  = new Array("hhh","08","32","3","0");
    content1[8]  = new Array("iii","09","41","2","0");
    content1[9]  = new Array("jjj","10","03","1","0");//組合排序
    function solesort(a,b)

      var num = a.length;
      if  (a[num-1]-b[num-1]!=0) //降序
       return -(a[num-1]-b[num-1]);
      if  (a[num-2]-b[num-2]!=0)  //升序
       return a[num-2]-b[num-2];
      if  (a[num-3]-b[num-3]!=0) //降序
       return -(a[num-3]-b[num-3]);
      return a[num-4]-b[num-4];  //升序
    }//打印結果
    //先按下標4降序排列,再按下標3升序排列,再按下標2降序列,下標1判斷在前三種相同的情況下按原數據位置排列
    ar = content1.sort(solesort);
    for(v in ar)
      document.write(ar[v]+"<br/>");
    //-->
    </script>
    </HEAD>
    <BODY bgcolor="#FFFFFF" text="#000000">
    </BODY>
    </HTML>-------------------------------------------------------------------------------因為在實際中,排序的數組是按要求動態生成的,所以這個判斷需要將條件放到數組的后四位中才能起作用。