如何在javascript中对多维数组进行排序

Posted

技术标签:

【中文标题】如何在javascript中对多维数组进行排序【英文标题】:How to sort multidimensional array in 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]; ); 在这种情况下已经排序,但请检查我的答案。我更改了城市名称。 【参考方案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中的任何一个。

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

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

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。所以,我让函数更灵活,也可以传递比较器函数:)

以上是关于如何在javascript中对多维数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 在AS3中对多维数组进行排序(数字)

Javascript:对多维数组进行排序

在AS3中对多维数组排序(数字)

JavaScript:自动对可变多维数组进行对角排序

在javascript中创建新的数组排序多维数组

如何在 C# 中按升序对多维数组进行排序? [复制]