按2列排序多维数组 - JavaScript

时间:2015-03-10 16:31:30

标签: javascript arrays string sorting multidimensional-array

我有一个二维数组,里面有不同的元素。我想根据2个不同的标准对数组进行排序。一个是字符串,另一个是整数。 这是一个例子。

var arr = [
    ['ABC', 87, 'WHAT'], 
    ['ABC', 34, 'ARE'], 
    ['DEF', 13, 'YOU'], 
    ['ABC', 18, 'DOING'], 
    ['ABC', 34, 'DOING'],
    ['DEF', 24, 'TODAY']
];

我想首先按第一个元素排序,然后按第二个元素排序。

1 个答案:

答案 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));

Fiddle