如何在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中对多维数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章