ধরুন আমাদের নিচের মতো অবজেক্টের একটি অ্যারে আছে:
const array = [
{key: 'a', value: false},
{key: 'a', value: 100},
{key: 'a', value: null},
{key: 'a', value: 23}
];
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা এমন অ্যারে গ্রহণ করে এবং যেসব অবজেক্টের value প্রপার্টির মান মিথ্যা (falsy) সেগুলো নিচে পাঠাবে, বাকি অবজেক্টগুলো value অনুযায়ী নিরবচ্ছিন্ন ক্রমে (decreasing order) সাজাবে।
উদাহরণ
কোডটি নিচে দেওয়া হলো:
const arr = [
{key: 'a', value: false},
{key: 'a', value: 100},
{key: 'a', value: null},
{key: 'a', value: 23}
];
const isValFalsy = (obj) => !obj.value && typeof obj.value !== 'number';
const sortFalsy = arr => {
arr.sort((a, b) => {
if (isValFalsy(a) && isValFalsy(b)) {
return 0;
}
if (isValFalsy(a)) {
return 1;
}
if (isValFalsy(b)) {
return -1;
}
return b.value - a.value;
});
};
sortFalsy(arr);
console.log(arr);
আউটপুট
কনসোলে নিচের আউটপুট দেখাবে:
[
{ key: 'a', value: 100 },
{ key: 'a', value: 23 },
{ key: 'a', value: false },
{ key: 'a', value: null }
]
ব্যাখ্যা
isValFalsyফাংশনটি চেক করে যেvalueমিথ্যা (false, null, undefined, 0, "", NaN) কিনা, কিন্তু সংখ্যা (number) টাইপের 0 বাদ দিয়ে।sortFalsyফাংশনেsort()মেথড ব্যবহার করা হয়েছে কাস্টম কমপারেটর ফাংশনের সাথে।- দুইটি অবজেক্টই যদি মিথ্যা হয়, তবে তাদের ক্রম অপরিবর্তিত থাকে (return 0)।
- প্রথমটি মিথ্যা হলে সেটি পিছনে যাবে (return 1), দ্বিতীয়টি মিথ্যা হলে সেটি পিছনে যাবে (return -1)।
- অন্যথায়,
valueঅনুযায়ী নিরবচ্ছিন্ন ক্রমে সাজাবে (b.value - a.value)।