【问题标题】:How to sort multidimensional array in javascript如何在javascript中对多维数组进行排序
【发布时间】:2014-01-19 21:08:39
【问题描述】:

我有一个数组如下

var arry = [ [1, "Convention Hall", "Mumbai", 10, "XYZ Company"], 
             [2, "Auditorium", "Delhi", 10, "ABC Company"], 
             [3, "CenterHall", "Bangalore", 10, "ZZZ Company"],
            ....
            ]

我想根据数组的第三项按字母顺序对数组进行排序,即 arry[n][2]

如何做到这一点。

【问题讨论】:

  • 那么,在这种情况下它已经排序了吗?
  • arry.sort(function (a, b) { return a[2] - b[2]; });
  • 在这种情况下已经排序,但请检查我的答案。我更改了城市名称。

标签: javascript jquery sorting multidimensional-array


【解决方案1】:

试试这个

//WITH FIRST COLUMN
     arry = arry.sort(function(a,b) {
      return a[0] > b[0];
    });


//WITH SECOND COLUMN
arry = arry.sort(function(a,b) {
 return a[1] > b[1];
 });


//WITH THIRD COLUMN
//and you want this code below
arry = arry.sort(function(a,b) {
 return a[2] > b[2];
 });

【讨论】:

    【解决方案2】:

    http://jsfiddle.net/VPrAr/

    您可以使用arry.sort()。默认为字母数字和升序。

    原来是这样:

    var arry = [ [1, "Convention Hall", "Dangalore", 10, "XYZ Company"], 
                 [2, "Auditorium", "Belhi", 10, "ABC Company"], 
                 [3, "CenterHall", "Aumbai", 10, "ZZZ Company"],
                ];
    var x =arry.sort(function(a,b){ return a[2] > b[2] ? 1 : -1; });
    alert(x);
    

    【讨论】:

    • 既然 sort 是 mutator 方法,就没有必要把它赋给新变量,那a[2] === b[2]呢?
    【解决方案3】:

    例如使用排序函数:

    arry.sort(function(a,b){
       return a[2] > b[2] ? 1 : -1;
    });
    

    【讨论】:

      【解决方案4】:

      Array.prototype.sort函数需要一个函数作为参数,它接受两个参数并返回-1, 0 or 1中的任何一个。

      我是函数式编程的忠实粉丝,所以我想出了这个。这提供了灵活性。

      1. 您可以根据任何元素进行排序
      2. 您甚至可以颠倒排序顺序
      3. 您可以自定义对象的比较方式。

      function basicComparator(first, second) {
          if (first === second) {
              return 0;
          } else if (first < second) {
              return -1;
          } else {
              return 1;
          }
      }
      
      function compareNthElements(n, comparatorFunction, reverse) {
          return function(first, second) {
              if (reverse === true) {
                  return comparatorFunction(second[n], first[n]);
              } else {
                  return comparatorFunction(first[n], second[n]);
              }
          }
      }
      

      就是这样。现在,像这样调用sort 函数

      arry.sort(compareNthElements(1, basicComparator, true));  // Sorts first field and in reverse
      arry.sort(compareNthElements(2, basicComparator));        // Sorts second field
      

      【讨论】:

      • 为什么不简单地return first - second;
      • @Givi 它可能不适用于所有数据类型。例如,如果被比较的两个元素都是对象,它将返回NaN。所以,我让函数更灵活,也可以传递比较器函数:)
      猜你喜欢
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 2011-10-23
      • 2011-08-31
      • 2012-11-27
      • 2017-07-03
      相关资源
      最近更新 更多