279 votes

Trier les objets d'un tableau par ordre alphabétique en fonction d'une propriété du tableau.

Disons que vous avez une classe JavaScript comme celle-ci

var DepartmentFactory = function(data) {
    this.id = data.Id;
    this.name = data.DepartmentName;
    this.active = data.Active;
}

Disons que vous créez ensuite un certain nombre d'instances de cette classe et que vous les stockez dans un tableau.

var objArray = [];
objArray.push(DepartmentFactory({Id: 1, DepartmentName: 'Marketing', Active: true}));
objArray.push(DepartmentFactory({Id: 2, DepartmentName: 'Sales', Active: true}));
objArray.push(DepartmentFactory({Id: 3, DepartmentName: 'Development', Active: true}));
objArray.push(DepartmentFactory({Id: 4, DepartmentName: 'Accounting', Active: true}));

J'aurais donc maintenant un tableau d'objets créés par DepartmentFactory . Comment dois-je procéder pour utiliser le array.sort() pour trier ce tableau d'objets par la méthode DepartmentName de chaque objet ?

El array.sort() fonctionne très bien pour trier un tableau de chaînes de caractères.

var myarray=["Bob", "Bully", "Amy"];
myarray.sort(); //Array now becomes ["Amy", "Bob", "Bully"]

Mais comment faire pour que cela fonctionne avec une liste d'objets ?

453voto

ob. Points 9631

Vous devriez faire quelque chose comme ça :

objArray.sort(function(a, b) {
    var textA = a.DepartmentName.toUpperCase();
    var textB = b.DepartmentName.toUpperCase();
    return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
});

note : changer la casse (en majuscule ou minuscule) assure un tri insensible à la casse.

222voto

ron tornambe Points 4483

Pour supporter l'unicode :

objArray.sort(function(a, b) {
   return a.DepartmentName.localeCompare(b.DepartmentName);
});

29voto

Ludovic Points 113

Un code plus court avec ES6

objArray.sort((a, b) => a.DepartmentName.toLowerCase().localeCompare(b.DepartmentName.toLowerCase()))

15voto

Neil Points 4528
objArray.sort((a, b) => a.DepartmentName.localeCompare(b.DepartmentName))

14voto

tracevipin Points 8987
var DepartmentFactory = function(data) {
    this.id = data.Id;
    this.name = data.DepartmentName;
    this.active = data.Active;
}

// use `new DepartmentFactory` as given below. `new` is imporatant

var objArray = [];
objArray.push(new DepartmentFactory({Id: 1, DepartmentName: 'Marketing', Active: true}));
objArray.push(new DepartmentFactory({Id: 2, DepartmentName: 'Sales', Active: true}));
objArray.push(new DepartmentFactory({Id: 3, DepartmentName: 'Development', Active: true}));
objArray.push(new DepartmentFactory({Id: 4, DepartmentName: 'Accounting', Active: true}));

function sortOn(property){
    return function(a, b){
        if(a[property] < b[property]){
            return -1;
        }else if(a[property] > b[property]){
            return 1;
        }else{
            return 0;   
        }
    }
}

//objArray.sort(sortOn("id")); // because `this.id = data.Id;`
objArray.sort(sortOn("name")); // because `this.name = data.DepartmentName;`
console.log(objArray);

démo : http://jsfiddle.net/diode/hdgeH/

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