120 votes

Comment trier un tableau à 2 dimensions par valeur de colonne ?

Quelqu'un peut-il m'aider à trier un tableau à 2 dimensions en JavaScript ?

Il contiendra des données au format suivant :

[12, AAA]
[58, BBB]
[28, CCC]
[18, DDD]

Il devrait ressembler à ceci une fois trié :

[12, AAA]
[18, DDD]
[28, CCC]
[58, BBB]

Donc, en gros, trier par la première colonne.

Cheers

151voto

jahroy Points 10072

C'est aussi simple que ça :

var a = [[12, 'AAA'], [58, 'BBB'], [28, 'CCC'],[18, 'DDD']];

a.sort(sortFunction);

function sortFunction(a, b) {
    if (a[0] === b[0]) {
        return 0;
    }
    else {
        return (a[0] < b[0]) ? -1 : 1;
    }
}

Je vous invite à lire la documentation .

Si vous voulez trier par la deuxième colonne, vous pouvez le faire :

a.sort(compareSecondColumn);

function compareSecondColumn(a, b) {
    if (a[1] === b[1]) {
        return 0;
    }
    else {
        return (a[1] < b[1]) ? -1 : 1;
    }
}

82voto

La meilleure approche serait d'utiliser ce qui suit, car il peut y avoir des valeurs répétitives dans la première colonne.

var arr = [[12, 'AAA'], [12, 'BBB'], [12, 'CCC'],[28, 'DDD'], [18, 'CCC'],[12, 'DDD'],[18, 'CCC'],[28, 'DDD'],[28, 'DDD'],[58, 'BBB'],[68, 'BBB'],[78, 'BBB']];

arr.sort(function(a,b) {
    return a[0]-b[0]
});

64voto

PSR Points 14768

Essayez ceci

//WITH FIRST COLUMN
arr = arr.sort(function(a,b) {
    return a[0] - b[0];
});

//WITH SECOND COLUMN
arr = arr.sort(function(a,b) {
    return a[1] - b[1];
});

Note : La réponse originale utilisait un plus grand que (>) au lieu d'un moins (-), ce que les commentaires qualifient d'incorrect.

15voto

Dinesh Rajan Points 339

En utilisant la fonction flèche, et en triant par le deuxième champ de chaîne de caractères

var a = [[12, 'CCC'], [58, 'AAA'], [57, 'DDD'], [28, 'CCC'],[18, 'BBB']];
a.sort((a, b) => a[1].localeCompare(b[1]));
console.log(a)

12voto

Charles Clayton Points 7465

Si vous êtes comme moi, vous n'avez pas envie de modifier chaque index chaque fois que vous souhaitez changer la colonne sur laquelle vous effectuez le tri.

function sortByColumn(a, colIndex){

    a.sort(sortFunction);

    function sortFunction(a, b) {
        if (a[colIndex] === b[colIndex]) {
            return 0;
        }
        else {
            return (a[colIndex] < b[colIndex]) ? -1 : 1;
        }
    }

    return a;
}

var sorted_a = sortByColumn(a, 2);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X