在Javascript中对数字数组进行排序

时间:2017-05-21 13:02:18

标签: javascript arrays

我有一个包含四个数字数组的数组arr,例如:

arr = [
    [4, 1, 3, 2, 0],
    [4, 2, 1, 3, 0],
    [0, 2, 3, 1, 4],
    [0, 3, 1, 2, 4]
]

我需要对其进行排序:

arr = [
    [0, 2, 3, 1, 4],
    [0, 3, 1, 2, 4]
    [4, 1, 3, 2, 0],
    [4, 2, 1, 3, 0],
]

数字数组可以更大,但四个数组的大小始终相同。有时需要比数字数组的第一个和第二个元素进行比较以获得更小的数字。 我在这个answer中找到了下面的代码,但它仅限于前两个数字数组元素。

myArray=myArray.sort(function(a,b){
    retVal=0;
    if(a[0]!=b[0]) retVal=a[0]>b[0]?1:-1;
    else if(a[1]!=b[1]) retVal=a[1]>b[1]?1:-1;
    else if(a[2]!=b[2]) retVal=a[2]>b[2]?1:-1;
    return retVal
});

修改

在输出中,元素arr[0][0]arr[1][0]等于且小于元素arr[2][0]arr[3][0]。在第二级中,元素arr[0][1]小于arr[1][1]。在某些情况下,有很多级别,我无法预测多少。

我该如何实施?

2 个答案:

答案 0 :(得分:2)

迭代数组,直到找到不匹配的元素并返回第一个不匹配的差异

var arr = [
    [4, 1, 3, 2, 0],
    [4, 2, 1, 3, 0],
    [0, 2, 3, 1, 4],
    [0, 3, 1, 2, 4]
]


arr.sort(function(a,b){       
   for(var i=0; i< a.length; i++){
     // if they don't match, return difference
     if(a[i] !== b[i]){
       return a[i] - b[i];
     }
   }  
   // if we get this far they are the same     
   return 0;
})

console.log(JSON.stringify(arr))

答案 1 :(得分:1)

arr.sort(function(a,b) {
      for (i = 0; i < a.length); i++) {
           if (a[i] < b[i])
                return -1;
           if (a[i] > b[i])
                return 1;
       }
       return 0;
  });