Categories
JavaScript Programming Language

Array.prototype.sort()

এই Array.prototype.sort() পদ্ধতিটি একটি অ্যারের আইটেমগুলি কে বাছাই করে বা order করে নাম্বার বা বর্ণ (কেপিটেল) বর্ণ (স্মল ) অনুসারে বড় থেকে ছোট বা ছোট থেকে বড় সাজানোই হলো sort().

মুল এরে কে পরিবর্তন করে ।

যখন sort() করা শেষ হবে এরপর আমরা পুনরায় মূল Arrray এটাকে একবার চেক করে দেখি ওই মূল Arrray এটা ঠিক আছে কিনা তাই আমরা চেক করলাম , দেখা যাক এইখানে মূল Arrray এটা আগের টার মতোন দেখাচ্ছে না, কারণ আমরা যখন আগেরবার sort() করেছিলাম আমরা জানি sort() মূল Arrray কে পরিবর্তন করে ফেলে, তাই আমরা যখন পুনরায় মূল Arrray এটাকে চেক করছি তখন দেখতেছি যে মূল Arrray এটা পরিবর্তন হয়ে গিয়েছ। এখন যদি এই সমস্যা সলভ করতে চায় তাহলে এটাকে কপি করে তারপর ইউজ করলে সেটা নতুন Arrray পাওয়া যাবে আর মূল Arrray কোন ইফেক্ট হবেনা । বারবার কপি করে এ কাজটা করা কঠিন হয়ে যাবে। তা এক আমরা Array.slice() মেথড ব্যবহার করে এই কাজের সমাধান করতে পারি ।

যেমনঃ এখানে মেইন এরে হলো number1 নিছের উদাহারনের Checking 1 & Checking 2 ভালো করে লক্ষ্য করলে সব পরিস্কার হয়ে যাবে ।

Checking 1 এখানে সাধারণত যেভাবে sort() করা হয় তাই করা হয়েছে এবং sort() করার পর মুল এরেটাকে চেক করা হয়েছে । দেখা যাচ্ছে মুলটাই পরিবর্তন হয়ে গেছে ।

Checking 2 এখানে sort() করার জন্য সরাসরি মুল এরে number1 কে ব্যবহার না করে slice() ব্যবহার করা হয়েছে sort() করার আগে। আর সেখানে slice() দ্বারা কপি এরেকে sort() করেছে তাই মুল এরের কোন এফেক্ট পরে নাই । তাই বলা যায় number1আগের মতই আছে চাইলে অন্য ক্ষেত্রেও সেটা আবার ইউজ করা যাবে ।

 

একটি গুরুত্তপুর্ণ উদাহারনঃ

********** Solve 1 ************
Solve 1 কে লক্ষ্য করলে দাখাযাবে যে

# এখানে “sort()” মেথডটি ( 1 2 3 4 A B C D a b c d e… ) কে আনুসরন করছে । যা সবসময় করেথাকে ।
# তাই এখানে “sort()“ মেথড টি প্রথমে 1234… কে চেক করছে তারপর সে আনুযায়ী 1,200, 3, 45,54…. ফলাফল দেখাছে ।
# যদি আমরা “call back function” ব্যবহার করি তবে ঠিক হয়ে যাবে , এবং 1, 3, 45,54…. 200 সটিক “sort()“ দেখাবে ।

********** Solve 2 ************
Solve 2 কে লক্ষ্য করলে দাখাযাবে যে Solve 1 এর সমাধা দেখাচ্ছে

# যদি “0” থেকে কম রিটার্ন করে “a” এর মান আগে বসবে “b” এর মান পরে বসবে ।
# যদি “0” এর সমান সমান রিটার্ন করে “a” এবং “b” এর মান এর যায়গার কোন পরিবর্তন হবে না ।
# যদি “0” থেকে বেশি রিটার্ন করে “b” এর মান আগে বসবে “a” এর মান পরে বসবে ।

Solve 2 কি ভাবে সামাধা করেছে আলোচনা করা হলো ।
// full array [ 1 ,3 , 54, 45, 67,80, 200 ]
// a – b = calculating a & b
// 1 – 3 = b negative = 1 ( left 3, so 3 go for next )
// 3 – 54 = b negative = 3 ( left 54, so 54 go for next )
// 54 – 45 = a negative = 45 ( left 54, so 54 go for next )
// 54 – 67 = b negative = 54 ( left 67, so 67 go for next )
// 67 – 80 = b negative = 67 ( left 80, so 80 go for next )
// 80 – 200 = a negative = 80 ( left 200, so 200 go for next )
// 200 = 200 nothing left

 

আরেক টি সুন্দর উদাহারনঃ