我有一个二维数组,里面有不同的元素。我想根据2个不同的标准对数组进行排序。一个是字符串,另一个是整数。 这是一个例子。
var arr = [
['ABC', 87, 'WHAT'],
['ABC', 34, 'ARE'],
['DEF', 13, 'YOU'],
['ABC', 18, 'DOING'],
['ABC', 34, 'DOING'],
['DEF', 24, 'TODAY']
];
我想首先按第一个元素排序,然后按第二个元素排序。
答案 0 :(得分:4)
这是相当直接的:
如果字符串相等,则通过比较整数值来打破平局,否则返回结果localeCompare
var arr = [
['ABC', 87, 'WHAT'],
['ABC', 34, 'ARE'],
['DEF', 13, 'YOU'],
['ABC', 18, 'DOING'],
['ABC', 34, 'DOING'],
['DEF', 24, 'TODAY'],
['ABA', 18, 'TODAY'],
['ABA', 11, 'TODAY']
];
function doSort(ascending) {
ascending = typeof ascending == 'undefined' || ascending == true;
return function(a, b) {
var ret = a[0].localeCompare(b[0]) || a[1] - b[1];
return ascending ? ret : -ret;
};
}
// sort ascending
arr.sort(doSort());
// sort descending
arr.sort(doSort(false));