2011-11-09 98 views
0

我有一個二維數組,我需要進行數值排序。下面是陣列的一個示例:Javascript multidimentional array按數字順序排序

[0] [1] 
    3  320 
    55B 250 
    26 100 
    55A 260 
    56 310 
    89 420 

我需要按[0]值進行數值排序。這些值存儲爲字符串。我已經想出瞭如何按字母順序和數字排列數組,但我無法弄清楚如何訂購這個數組,因爲偶爾會有A和B.

+0

做我的理解是正確的,該陣列是這樣的:[[3,320],[「55B」 ,250],26,100]而不是[[3,「55B」,26],[320,250,100]]? – Yogu

+0

你可能會更具體地描述你想如何排序值?這一切似乎都有點武斷了。有什麼限制?換句話說,字母總是會出現在左起第三個位置?像這樣的東西。 –

+0

[按第二個值對二維數組排序]的可能重複(http://stackoverflow.com/questions/3524827/sort-a-2d-array-by-the-second-value) – epascarello

回答

4

parseInt方法會忽略數字後的任何字符串,刪除A和B的。

arr.sort(function(rowA, rowB){ 
    var a = parseInt(rowA[0], 10); 
    var b = parseInt(rowB[0], 10); 

    if (a > b) 
     return 1; 
    else if (a < b) 
     return -1; 
    return 0; 
}); 
+0

'arr.sort(function(a,b){return parseInt (a [0],10) - parseInt(b [0],10);});' – ErikE

0

只是爲了說明 - 如果這一個無關與排序,比parseInt去當扎克公佈。

但是,如果它要在排序中使用,你可以像這樣的東西去:

arr.sort(function(l,r){ 
    var vl = l[0].split(/(\d+)(\D*)/), 
     vr = r[0].split(/(\d+)(\D*)/); 

    vl[1] = parseInt(vl[1]); 
    vr[1] = parseInt(vr[1]); 

    if(vl[1] < vr[1]){ 
    return -1; 
    }else if(vl[1] === vr[1]){ 
     if(vl[2] < vr[2]) return -1; 
     else if(vl[2] === vr[2]) return 0; 
     else return 1; 
    }else{ 
     return 1; 
    } 
});