Hallo nach der Lektüre dieses Artikels, Ich habe eine sortComparator für meine Bedürfnisse, mit der Funktionalität zu vergleichen, mehr als ein Json-Attribute, und ich möchte es mit Ihnen teilen.
Diese Lösung vergleicht nur Zeichenketten in aufsteigender Reihenfolge, aber die Lösung kann leicht für jedes Attribut erweitert werden, um Folgendes zu unterstützen: umgekehrte Reihenfolge, andere Datentypen, Verwendung von Gebietsschema, Casting usw.
var homes = [{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
}, {
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}];
// comp = array of attributes to sort
// comp = ['attr1', 'attr2', 'attr3', ...]
function sortComparator(a, b, comp) {
// Compare the values of the first attribute
if (a[comp[0]] === b[comp[0]]) {
// if EQ proceed with the next attributes
if (comp.length > 1) {
return sortComparator(a, b, comp.slice(1));
} else {
// if no more attributes then return EQ
return 0;
}
} else {
// return less or great
return (a[comp[0]] < b[comp[0]] ? -1 : 1)
}
}
// Sort array homes
homes.sort(function(a, b) {
return sortComparator(a, b, ['state', 'city', 'zip']);
});
// display the array
homes.forEach(function(home) {
console.log(home.h_id, home.city, home.state, home.zip, home.price);
});
und das Ergebnis ist
$ node sort
4 Bevery Hills CA 90210 319250
5 New York NY 00010 962500
3 Dallas TX 75201 162500
und eine andere Art
homes.sort(function(a, b) {
return sortComparator(a, b, ['city', 'zip']);
});
mit Ergebnis
$ node sort
4 Bevery Hills CA 90210 319250
3 Dallas TX 75201 162500
5 New York NY 00010 962500