Mir ist klar, dass dies vor einiger Zeit gefragt wurde, aber ich dachte, ich würde meine Lösung hinzufügen.
Diese Funktion generiert Sortiermethoden dynamisch. Geben Sie einfach jeden sortierbaren untergeordneten Eigenschaftsnamen an, dem +/- vorangestellt ist, um die aufsteigende oder absteigende Reihenfolge anzuzeigen. Super wiederverwendbar, und es muss nichts über die Datenstruktur wissen, die Sie zusammengestellt haben. Könnte idiotensicher gemacht werden - scheint aber nicht notwendig.
function getSortMethod(){
var _args = Array.prototype.slice.call(arguments);
return function(a, b){
for(var x in _args){
var ax = a[_args[x].substring(1)];
var bx = b[_args[x].substring(1)];
var cx;
ax = typeof ax == "string" ? ax.toLowerCase() : ax / 1;
bx = typeof bx == "string" ? bx.toLowerCase() : bx / 1;
if(_args[x].substring(0,1) == "-"){cx = ax; ax = bx; bx = cx;}
if(ax != bx){return ax < bx ? -1 : 1;}
}
}
}
Anwendungsbeispiel:
items.sort (getSortMethod ('- Preis', '+ Priorität', '+ Name'));
Dies würde itemsmit dem niedrigsten pricezuerst sortieren , wobei die Bindungen zu dem Gegenstand mit dem höchsten gehen würdenpriority . Weitere Bindungen werden durch den Gegenstand unterbrochenname
Dabei ist items ein Array wie:
var items = [
{ name: "z - test item", price: "99.99", priority: 0, reviews: 309, rating: 2 },
{ name: "z - test item", price: "1.99", priority: 0, reviews: 11, rating: 0.5 },
{ name: "y - test item", price: "99.99", priority: 1, reviews: 99, rating: 1 },
{ name: "y - test item", price: "0", priority: 1, reviews: 394, rating: 3.5 },
{ name: "x - test item", price: "0", priority: 2, reviews: 249, rating: 0.5 } ...
];
Live-Demo: http://gregtaff.com/misc/multi_field_sort/
BEARBEITEN: Problem mit Chrome behoben.