मुझे लगता है कि यह कुछ समय पहले पूछा गया था, लेकिन मुझे लगा कि मैं अपना समाधान जोड़ूंगा।
यह फ़ंक्शन डायनामिक तरीके से सॉर्ट मेथड बनाता है। बस आरोही या अवरोही क्रम को दर्शाने के लिए प्रत्येक सॉर्टेबल चाइल्ड प्रॉपर्टी के नाम को +/- के साथ सप्लाई करें। सुपर पुन: प्रयोज्य, और इसे आपके द्वारा एक साथ रखी गई डेटा संरचना के बारे में कुछ भी जानने की आवश्यकता नहीं है। बेवकूफ प्रमाण बनाया जा सकता है - लेकिन आवश्यक नहीं लगता है।
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;}
}
}
}
उदाहरण का उपयोग:
items.sort (getSortMethod ('- मूल्य', '+ प्राथमिकता', '+ नाम'));
यह itemsसबसे priceपहले के साथ क्रमबद्ध होगा , सबसे अधिक के साथ आइटम के लिए जा रहे संबंधों के साथ priority। आइटम से आगे के संबंध टूट गए हैंname
जहाँ आइटम एक सरणी है जैसे:
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 } ...
];
लाइव डेमो: http://gregtaff.com/misc/multi_field_sort/
संपादित करें: क्रोम के साथ फिक्स्ड मुद्दा।