আমি বুঝতে পারি যে এটি সম্পর্কে কিছু আগে জিজ্ঞাসা করা হয়েছিল, তবে আমি ভেবেছিলাম যে আমি আমার সমাধান যুক্ত করব।
এই ফাংশনটি গতিশীলভাবে সাজানোর পদ্ধতিগুলি উত্পন্ন করে। আরোহী বা অবতরণ ক্রম নির্দেশ করতে কেবল প্রতিটি বাছাইযোগ্য বাচ্চার সম্পত্তির নাম সরবরাহ করুন + সুপারটি পুনরায় ব্যবহারযোগ্য এবং আপনার একসাথে রাখা ডেটা কাঠামো সম্পর্কে কিছু জানা দরকার নেই। বোকা প্রমাণ করা যেতে পারে - তবে এটি প্রয়োজনীয় বলে মনে হচ্ছে না।
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;}
}
}
}
উদাহরণস্বরূপ ব্যবহার:
আইটেম.সোর্ট (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/mult_field_sort/
সম্পাদনা: ক্রোম সহ স্থির সমস্যা।