javascript - কোনও সম্পত্তি দ্বারা বস্তুর একটি অ্যারে বাছাই করুন(কাস্টম অর্ডার সহ, বর্ণানুক্রমিকভাবে নয়)




arrays sorting (2)

আপনি একটি স্কিমা অ্যারে বাস্তবায়ন করতে পারেন এবং সেই স্কিমা অ্যারের ভিতরে উপাদানগুলির সূচক অনুসারে বাছাই করতে পারেন।

const a = ['GREEN', 'BLUE', 'RED'];

const o = [{code:"RED",value:0},{code:"BLUE",value:0},{code:"RED",value:0},{code:"GREEN",value:0},{code:"BLUE",value:0},{code:"RED",value:0},{code:"GREEN",value:0},{code:"BLUE",value:0}];

const r = o.slice().sort(({ code: q }, { code: w }) => a.indexOf(q) - a.indexOf(w));

console.log(r);

আমি এই সামান্য সমস্যা সম্পর্কে আপনার সহায়তা পেতে চাই।

আমি কোডের মানের উপর নির্ভর করে এই অ্যারেটি অর্ডার করতে চাই তবে বর্ণানুক্রমিক ক্রমে নয়। ( আমি এটিকে গা in়ভাবে উল্লেখ করেছি তবে শেষ পর্যন্ত যেভাবেই পতাকাঙ্কিত হয়ে গেছে, লোকেরা প্রশ্নটি পড়ার বিষয়েও চিন্তা করে না )

উদাহরণস্বরূপ আমি সমস্ত সবুজ বস্তু, তারপরে সমস্ত নীল এবং তারপরে সমস্ত লাল জিনিস রাখতে চাই। এটি করার সর্বোত্তম উপায় কী?

[
    { code: "RED", value: 0},
    { code: "BLUE", value: 0},
    { code: "RED", value: 0},
    { code: "GREEN", value: 0},
    { code: "BLUE", value: 0},
    { code: "RED", value: 0},
    { code: "GREEN", value: 0},
    { code: "BLUE", value: 0}
]

বাছাইয়ের কাজটি দিয়ে কি এটি করা সম্ভব? এক্ষেত্রে কী অবস্থা হবে?


আপনি চেয়েছিলেন অর্ডার জন্য একটি জিনিস নিতে পারে।

var array = [{ code: "RED", value: 0 }, { code: "BLUE", value: 0 }, { code: "RED", value: 0 }, { code: "GREEN", value: 0 }, { code: "BLUE", value: 0 }, { code: "RED", value: 0 }, { code: "GREEN", value: 0 }, { code: "BLUE", value: 0 }],
    order = { GREEN: 1, BLUE: 2, RED: 3 };
    
array.sort(function (a, b) {
    return order[a.code] - order[b.code];
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

অজানা রঙ / মানগুলির জন্য, আপনি এটির সাথে একটি ডিফল্ট মান ব্যবহার করতে পারেন

  • 0 , শীর্ষ বাছাই করার জন্য
  • শেষ পর্যন্ত বাছাই করার জন্য Infinity ,
  • বা অন্য গ্রুপগুলির মধ্যে অন্তর্নির্মিত বাছাইয়ের জন্য অন্য কোনও মান।

শেষ অবধি আপনি যুক্তযুক্ত বা ||

var array = [{ code: "YELLOW", value: 0 }, { code: "BLACK", value: 0 }, { code: "RED", value: 0 }, { code: "BLUE", value: 0 }, { code: "RED", value: 0 }, { code: "GREEN", value: 0 }, { code: "BLUE", value: 0 }, { code: "RED", value: 0 }, { code: "GREEN", value: 0 }, { code: "BLUE", value: 0 }],
    order = { GREEN: 1, BLUE: 2, RED: 3, default: Infinity };
    
array.sort(function (a, b) {
    return (order[a.code] || order.default) - (order[b.code] || order.default) || a.code.localeCompare(b.code);
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }






sorting