【问题标题】:How to sort array in javascript?如何在javascript中对数组进行排序?
【发布时间】:2010-02-02 15:57:54
【问题描述】:
var arr = [];
arr.push(row1);
arr.push(row2);
...
arr.push(rown);

如何按row['key']排序?

【问题讨论】:

    标签: javascript arrays sorting


    【解决方案1】:

    JavaScript 数组有一个内置的sort() 方法。在这种情况下,类似以下的方法会起作用:

    arr.sort( function(row1, row2) {
        var k1 = row1["key"], k2 = row2["key"];
        return (k1 > k2) ? 1 : ( (k2 > k1) ? -1 : 0 );
    } );
    

    【讨论】:

      【解决方案2】:

      您使用比较器调用数组的排序函数。 JavaScript 比较器只是一个函数,它根据 a 是否小于 b、a 等于 b 或 a 是否大于 b 返回 -1、0 或 1:

      myarray.sort(function(a,b){
          if(a < b){
              return -1;
          } else if(a == b){
              return 0;
          } else { // a > b
              return 1;
          }
      });
      

      这只是一个示例,您的函数可以根据您的需要进行比较,但它需要返回 -1,0,1。

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        如果要对数组中的多个列进行升序、降序或排序,这里有一组函数。

        var cmp = function(x, y){ return x > y? 1 : x < y ? -1 : 0; },
            arr =  [{a:0,b:0},{a:2,b:1},{a:1,b:2},{a:2, b:2}];
        
        // sort on column a ascending
        arr.sort(function(x, y){
            return cmp( cmp(x.a, y.a), cmp(y.a, x.a) );
        });
        
        // sort on column a descending
        arr.sort(function(x, y){
            return cmp( -cmp(x.a, y.a), -cmp(y.a, x.a) );
        });
        
        // sort on columns a ascending and b descending
        arr.sort(function(x, y){
            return cmp([cmp(x.a, y.a), -cmp(x.b, y.b)], [cmp(y.a, x.a), -cmp(y.b,x.b)]);
        });
        

        要获得升序,请使用“cmp(...)”,要获得降序,请使用“-cmp(...)”

        要对多列进行排序,请比较 cmp(...) 的两个数组

        【讨论】:

          【解决方案4】:

          考虑以下代码:

          var arr = new Array();
          
          for(var i = 0; i < 10; ++i) {
              var nestedArray = [ "test", Math.random() ];
              arr.push(nestedArray);
          }
          
          function sortBySecondField(a, b) {
              var aRandom = a[1];
              var bRandom = b[1];
          
              return ((aRandom < bRandom) ? -1 : ((aRandom > bRandom) ? 1 : 0));
          }
          
          arr.sort(sortBySecondField);
          
          alert(arr);
          

          现在只需更改sortBySecondField 函数以比较a['key'] 而不是a[1],并对b 执行相同操作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-29
            • 2011-05-01
            • 2021-06-03
            • 2023-03-04
            • 2014-01-19
            相关资源
            最近更新 更多