Mit der folgenden Funktion können Sie ein Array von Objekten nach einer oder mehreren Eigenschaften sortieren, entweder aufsteigend (Standard) oder absteigend für jede Eigenschaft, und Sie können auswählen, ob Vergleiche zwischen Groß- und Kleinschreibung durchgeführt werden sollen oder nicht. Standardmäßig führt diese Funktion Sortierungen ohne Berücksichtigung der Groß- und Kleinschreibung durch.
Das erste Argument muss das Array sein, das die Objekte enthält. Die nachfolgenden Argumente müssen eine durch Kommas getrennte Liste von Zeichenfolgen sein, die auf die verschiedenen Objekteigenschaften verweisen, nach denen sortiert werden soll. Das letzte Argument (das optional ist) ist ein Boolescher Wert, mit dem ausgewählt wird, ob Sortierungen mit true
Groß- und Kleinschreibung durchgeführt werden sollen oder nicht .
Die Funktion sortiert jede Eigenschaft / jeden Schlüssel standardmäßig in aufsteigender Reihenfolge. Wenn Sie möchten, dass ein bestimmter Schlüssel in absteigender Reihenfolge sortiert wird, übergeben Sie stattdessen ein Array in diesem Format : ['property_name', true]
.
Hier sind einige Anwendungsbeispiele für die Funktion, gefolgt von einer Erklärung (wobei homes
sich ein Array mit den Objekten befindet):
objSort(homes, 'city')
-> nach Stadt sortieren (aufsteigend, Groß- und Kleinschreibung nicht berücksichtigen)
objSort(homes, ['city', true])
-> nach Stadt sortieren (absteigend, Groß- und Kleinschreibung nicht berücksichtigt)
objSort(homes, 'city', true)
-> nach Stadt sortieren, dann Preis (aufsteigend, Groß- und Kleinschreibung beachten )
objSort(homes, 'city', 'price')
-> nach Stadt sortieren, dann Preis (beide aufsteigend, Groß- und Kleinschreibung nicht berücksichtigt)
objSort(homes, 'city', ['price', true])
-> nach Stadt sortieren (aufsteigend), dann Preis (absteigend), Groß- und Kleinschreibung beachten)
Und ohne weiteres, hier ist die Funktion:
function objSort() {
var args = arguments,
array = args[0],
case_sensitive, keys_length, key, desc, a, b, i;
if (typeof arguments[arguments.length - 1] === 'boolean') {
case_sensitive = arguments[arguments.length - 1];
keys_length = arguments.length - 1;
} else {
case_sensitive = false;
keys_length = arguments.length;
}
return array.sort(function (obj1, obj2) {
for (i = 1; i < keys_length; i++) {
key = args[i];
if (typeof key !== 'string') {
desc = key[1];
key = key[0];
a = obj1[args[i][0]];
b = obj2[args[i][0]];
} else {
desc = false;
a = obj1[args[i]];
b = obj2[args[i]];
}
if (case_sensitive === false && typeof a === 'string') {
a = a.toLowerCase();
b = b.toLowerCase();
}
if (! desc) {
if (a < b) return -1;
if (a > b) return 1;
} else {
if (a > b) return -1;
if (a < b) return 1;
}
}
return 0;
});
} //end of objSort() function
Und hier einige Beispieldaten:
var homes = [{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": 162500
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": 1000000
}, {
"h_id": "5",
"city": "new york",
"state": "NY",
"zip": "00010",
"price": 1000000
}, {
"h_id": "6",
"city": "Dallas",
"state": "TX",
"zip": "85000",
"price": 300000
}, {
"h_id": "7",
"city": "New York",
"state": "NY",
"zip": "00020",
"price": 345000
}];