একটি অ্যারে দেওয়া আছে যাতে সংখ্যা, স্ট্রিং, undefined, null, NaN ইত্যাদি মিশ্র টাইপের মান থাকতে পারে। আমাদের ফাংশনটি শুধু সংখ্যা (Number) মানগুলো থেকে সর্বোচ্চটি বের করবে।
উদাহরণ
ইনপুট:
const arr = [23, 'hello', undefined, null, 21, 65, NaN, 1, undefined, 'hii'];
আউটপুট: 65
উদাহরণ কোড
const arr = [23, 'hello', undefined, null, 21, 65, NaN, 1, undefined, 'hii'];
const pickBiggest = arr => {
let max = -Infinity;
for (let i = 0; i < arr.length; i++) {
// !+arr[i] চেক করে নন-নাম্বার বা NaN/0/null/undefined বাদ দেয়
if (!+arr[i]) {
continue;
}
max = Math.max(max, +arr[i]);
}
return max;
};
console.log(pickBiggest(arr));
আউটপুট
65
ব্যাখ্যা
+arr[i]দিয়ে মানকে সংখ্যায় কনভার্ট করা হয়েছে। স্ট্রিং, null, undefined, NaN -> NaN বা 0 হয়।!+arr[i]সত্য হলে (অর্থাৎ NaN, 0, null, undefined, false, "") সেটি বাদ দেওয়া হয়েছে।- সীমাবদ্ধতা: এই লজিক
0কে বাদ দেয়, কিন্তু ০ একটি বৈধ সংখ্যা। যদি অ্যারেতে ০ থাকে এবং সেটিই সর্বোচ্চ হয় (সব নেগেটিভ হলে), তবে এই কোড সঠিক কাজ করবে না।
উন্নত সংস্করণ (Type-safe)
const pickBiggestSafe = arr => {
let max = -Infinity;
for (const val of arr) {
if (typeof val === 'number' && !isNaN(val)) {
max = Math.max(max, val);
}
}
return max === -Infinity ? null : max; // কোনো সংখ্যা নাইলে null
};
এই ভার্সনটি 0 কে সঠিকভাবে হ্যান্ডেল করে এবং শুধু আসল number টাইপ বিবেচনা করে।