একটি সংখ্যা অ্যারে দেওয়া আছে। ফাংশনটি অ্যারের মাঝপথের উপাদানটি রিটার্ন করবে। যদি অ্যারের দৈর্ঘ্য জোড় হয়, তবে মাঝপথের দুটি উপাদান রিটার্ন করবে।
উদাহরণ
[1, 2, 3, 4, 5, 6, 7]→ আউটপুট:[4](দৈর্ঘ্য ৭, মাঝপথ ইনডেক্স ৩)[1, 2, 3, 4, 5, 6]→ আউটপুট:[3, 4](দৈর্ঘ্য ৬, মাঝপথ ইনডেক্স ২ ও ৩)
উদাহরণ কোড
const arr = [1, 2, 3, 4, 5, 6, 7];
const middle = function() {
const half = this.length >> 1; // Math.floor(length / 2)
const offset = 1 - this.length % 2; // জোড় দৈর্ঘ্যের জন্য 1, বিজোড়ের জন্য 0
return this.slice(half - offset, half + 1);
};
Array.prototype.middle = middle;
console.log(arr.middle()); // [4]
console.log([1, 2, 3, 4, 5, 6].middle()); // [3, 4]
আউটপুট
[ 4 ]
[ 3, 4 ]
ব্যাখ্যা
this.length >> 1বিটওয়াইজ রাইট শিফ্ট দিয়ে দৈর্ঘ্যের অর্ধেক (floor) বের করা হয়েছে।offset: দৈর্ঘ্য বিজোড় হলেlength % 2 = 1, তাইoffset = 0। দৈর্ঘ্য জোড় হলেlength % 2 = 0, তাইoffset = 1।slice(half - offset, half + 1)দিয়ে সাবঅ্যারে এক্সট্র্যাক্ট করা হয়েছে।- প্রোটোটাইপে
middleমেথড অ্যাড করা হয়েছে যাতে যেকোনো অ্যারেয়ে.middle()কল করা যায়।
ফাংশনাল সংস্করণ (প্রোটোটাইপ ম্যানিপুলেশন ছাড়া)
const getMiddle = arr => {
const half = Math.floor(arr.length / 2);
if (arr.length % 2 === 0) {
return [arr[half - 1], arr[half]];
}
return [arr[half]];
};