使用javascript对二维数组进行排序

时间:2018-01-12 10:14:20

标签: javascript

我想使用javascript对二维数组进行排序。

我的阵列:

[
  ['1','6'],
  ['1','5'],
  ['2','3'],
  ['0','4'],
]

我的排序功能:

// 1st sort
myArray.sort( function(a, b) {
  return a[0] - b[0];
});

// 2nd sort
myArray.sort( function(a, b) {
  return a[1] - b[1];
});

结果:

["2", "3"]
["0", "4"]
["1", "6"]
["1", "5"]

结果应为:

["0", "4"]
["1", "5"] // 5 before 6 and the left column is sorted
["1", "6"]
["2", "3"]

3 个答案:

答案 0 :(得分:5)

你的第二种排序覆盖了第一次排序完成的排序,并且只保留第二列的排序。

您不需要两个sort功能,只需将它们包含在一个

myArray.sort( function(a, b) {
  return (a[0] - b[0]) || (a[1] - b[1]);
});

或没有大括号

myArray.sort( function(a, b) {
  return a[0] - b[0] || a[1] - b[1];
});

<强>演示

&#13;
&#13;
var myArray = [
    ['1','6'],
    ['1','5'],
    ['2','3'],
    ['12','13'],
    ['0','4'],
];
myArray.sort(function(a, b) {
  return (a[0] - b[0]) || (a[1] - b[1]);
});

console.log(myArray);
&#13;
&#13;
&#13;

答案 1 :(得分:4)

您可以对任意长度的数组使用不同的方法。

此解决方案假设所有内部数组都具有相同的长度。

var array = [['1','6', '1'], ['1','5', '1'], ['1','5', '2'], ['2','3', '0'], ['0','4', '0']];

array.sort(function (a, b) {
    var d;
    a.some((v, i) => d = v - b[i]);
    return d;
});

console.log(array.map(a => a.join(' ')));

答案 2 :(得分:3)

 myArray.sort((a, b) => (a[0] - b[0]) || (a[1] - b[1]));

如果第一个插槽相等,则在第二个插槽后排序