过去两天我一直在试图找到解决问题的办法,但我无法弄明白。
我需要先按数字排序数组,然后按字典顺序排序。虽然定制a< b函数可以解决第一个,正常的array.sort()可以做第二个。但我不知道如何将它们结合起来。
我有一个与此类似的数组:
var arr = [
[ '80', '1', '230' ],
[ '9', '1', '230' ],
[ 'Ken', '6', '100' ],
[ 'Dan', '2', '800' ],
[ 'Tom', '6', '500' ],
[ 'team10', '2', '222' ],
[ 'team9', '2', '222' ]
];

首先需要根据arr [n] [1]中的数字(最大到最小)对数组进行数值排序。具有相同arr [n] [1]值的结果需要根据arr [n] [2](从最大到最小)以数字方式排序。最后,具有相同值[n] [1]和[n] [2]的结果需要基于arr [n] [0]进行lexigographically排序。
到目前为止我得到的最远的是这种方法:
function sortArr() {
arr.sort(function(a,b) {
if (a[1] === b[1]) {
if (a[2] === b[2]) {
return b[0] < a[0];
}
return a[2]-b[2];
}
return b[1]-a[1]
});
}
&#13;
虽然数字排序适用于此,但词典排序并不适用。任何帮助将不胜感激。
答案 0 :(得分:1)
我建议对字符串使用带String#localeCompare
的链式方法。
排序顺序:
var arr = [[ '80', '1', '230' ], [ '9', '1', '230' ], [ 'Ken', '6', '100' ], [ 'Dan', '2', '800' ], [ 'Tom', '6', '500' ], [ 'team10', '2', '222' ], [ 'team9', '2', '222' ]];
arr.sort(function (a, b) {
var aa = a[0].split(/(\d+)/g),
bb = b[0].split(/(\d+)/g);
return b[1] - a[1] ||
b[2] - a[2] ||
aa[0].localeCompare(bb[0]) || aa[1] - bb[1];
});
console.log(arr);