2011-11-09 27 views
0

私は数値的にソートする必要がある2次元配列を持っています。配列のサンプルを次に示します。Javascript多次元配列の数値順の並べ替え

[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

値をソートする方法を具体的に記述することはできますか?今はちょっと恣意的なようです。制約は何ですか?言い換えれば、左から3番目の位置に常にアルファベットが現われますか?そのようなもの。 –

+0

[2番目の値で2次元配列をソートする]の複製が可能です(http://stackoverflow.com/questions/3524827/sort-a-2d-array-by-the-second-value) – epascarello

答えて

4

parseIntメソッドは数字の後の文字列をすべて無視し、 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で行くよりも、とBは、ソートとは何の関係もありません。この場合。

しかし、それは、ソートで使用されるべきであるならば、あなたはこのようなもので行くことができます:

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; 
    } 
}); 
関連する問題