使用javascript对二维数组排序

使用javascript对二维数组排序,javascript,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"] [

我想使用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"]
我的排序功能:

[
  ['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"]
结果:

[
  ['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"]
结果应为:

[
  ['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"]

您的第二个排序覆盖了第一个排序所完成的排序,并且只对第二列进行排序

您不需要两个
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];
});
演示

var myArray=[
['1','6'],
['1','5'],
['2','3'],
['12','13'],
['0','4'],
];
排序(函数(a,b){
返回(a[0]-b[0])| |(a[1]-b[1]);
});
log(myArray)

只要在第二个插槽之后排序,如果第一个插槽相等,则可以对任意长度的数组使用不同的方法

此解决方案假定所有内部阵列具有相同的长度

var数组=['1'、'6'、'1']、['1'、'5'、'1']、['1'、'5'、'2']、['2'、'3'、'0']、['0'、'4'、'0'];
array.sort(函数(a,b){
变量d;
a、 一些((v,i)=>d=v-b[i]);
返回d;
});

log(array.map(a=>a.join(“”))试试这个:@NinaScholz当然,我最初添加大括号是为了更好readability@NinaScholz
-
| |
之间的优先级并不明显(尽管有文档记录),所以大括号可以帮助哦,不。请不要使用一元加号将值更改为数字,因为默认情况下,它们是通过使用减号运算符转换为数字的。@NinaScholz你是对的,我在测试中没有使用一元加号,它也起到了作用。谢谢。
var i=0,res;而(!(res=a[i]-b[i++]);返回res。。。我仍然喜欢命令式编程…@JonasW.,对,另一种可能性,但没有长度检查。它永远以相等的数组循环,以值为单位。