2011-11-09 5 views
0

J'ai un tableau bidimensionnel dont j'ai besoin pour trier numériquement. Voici un exemple du tableau:Tri groupé Javascript multidimensionnel par ordre numérique

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

Je dois commander numériquement les valeurs [0]. Les valeurs sont stockées en tant que chaînes. J'ai compris comment trier les tableaux par ordre alphabétique et numérique, mais je n'arrive pas à comprendre comment commander ce tableau en raison de l'occasionnel A et B.

+0

Est-ce que je comprends bien, le tableau est comme ceci: [[3, 320], [ « 55B » , 250], 26, 100]] et non [[3, "55B", 26], [320, 250, 100]]? – Yogu

+0

Pourriez-vous décrire plus précisément comment vous voulez trier les valeurs? Tout semble un peu arbitraire en ce moment. Quelles sont les contraintes? En d'autres termes, les lettres vont-elles TOUJOURS apparaître en troisième position à partir de la gauche? Des trucs comme ça. –

+0

duplication possible de [Trier un tableau 2D par la deuxième valeur] (http://stackoverflow.com/questions/3524827/sort-a-2d-array-by-the-second-value) – epascarello

Répondre

4

La méthode parseInt ignorera tous les caractères chaîne après le nombre, supprimant les A et B's.

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 (fonction (a, b) {return parseInt (a [0], 10) - parseInt (b [0], 10);}); ' – ErikE

0

Juste pour noter - si ce A et B n'a rien à voir avec sorte, que d'aller avec parseInt que Zack a posté.

Mais si elle doit être utilisée dans une sorte, vous pouvez aller avec quelque chose comme ceci:

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