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

ton*_*227 4 javascript

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

我的阵列:

[
  ['1','6'],
  ['1','5'],
  ['2','3'],
  ['0','4'],
]
Run Code Online (Sandbox Code Playgroud)

我的排序功能:

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

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

结果 :

["2", "3"]
["0", "4"]
["1", "6"]
["1", "5"]
Run Code Online (Sandbox Code Playgroud)

结果应该是:

["0", "4"]
["1", "5"] // 5 before 6 and the left column is sorted
["1", "6"]
["2", "3"]
Run Code Online (Sandbox Code Playgroud)

gur*_*372 6

你的第二个排序是压倒一切的,首先做排序的排序,它是只保留第二列进行排序.

您不需要两个sort函数,只需将两者都包含在一起

myArray.sort( function(a, b) {
  return (a[0] - b[0]) || (a[1] - b[1]);
});
Run Code Online (Sandbox Code Playgroud)

或没有大括号

myArray.sort( function(a, b) {
  return a[0] - b[0] || a[1] - b[1];
});
Run Code Online (Sandbox Code Playgroud)

演示

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);
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 5

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

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

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(' ')));
Run Code Online (Sandbox Code Playgroud)