2017-05-21 45 views
0

數組我有一個數組四號陣列如arr排序數量的陣列在Javascript

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 
}); 

EDIT

在輸出中,元素arr[0][0]arr[1][0]比元件arr[2][0]arr[3][0]相等,更小。在第二級中,元素arr[0][1]小於arr[1][1]。在某些情況下,有很多層次,我無法預測有多少。

我該如何執行它?

+0

如何第二陣列(輸出)排序?什麼是規則? –

+0

在輸出中,在第一級中,'arr [0] [0]'和'arr [1] [0]'低於'arr [2] [0]'和'arr [3] [0 ]'。在第二級中,'arr [0] [0]'低於'arr [1] [0]'。我會在問題中解釋。 – msampaio

回答

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
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; 
    }); 
+0

'長度()'不是函數 – charlietfl

+0

可能。未經測試的代碼。 – nucleon

+0

但我承認,你的代碼更好 – nucleon