জাভাস্ক্রিপ্টে অ্যারে কপি করা অ্যাসাইনমেন্ট অপারেটর (=) দিয়ে τόσο সহজ নয়। আপনি যদি চেষ্টা করেন, তাহলে দেখবেন এটি মূল অ্যারের একটি রেফারেন্স (লিংক) তৈরি করে, ডুপ্লিকেট নয়। কেন?
এই গাইডে জাভাস্ক্রিপ্ট অ্যারে কপি করার তিনটি পদ্ধতি উদাহরণসহ আলোচনা করব।
জাভাস্ক্রিপ্ট অ্যারে কপির সমস্যা
= অপারেটর একটি অ্যারের কপি তৈরি করতে ভালো লাগে, কিন্তু আসলে এটি একটি পয়েন্টার। এটি মূল অ্যারের রেফারেন্স তৈরি করে, নতুন অ্যারে তৈরি করে না।
চেষ্টা করি:
var berries = ["Strawberry", "Gooseberry", "Raspberry"]; var fruits = berries; console.log(fruits);
ফলাফল: ["Strawberry", "Gooseberry", "Raspberry"]। লাগছে কপি হয়েছে।
এখন fruits-এ একটি আইটেম যোগ করুন:
fruits.push("Melon"); console.log(fruits); console.log(berries);
ফলাফল:
[ "Strawberry", "Gooseberry", "Raspberry", "Melon" ] [ "Strawberry", "Gooseberry", "Raspberry", "Melon" ]
দুটি অ্যারেও একই মান দেখাচ্ছে! কারণ আমরা অ্যারে ক্লোন করিনি, শুধু রেফারেন্স তৈরি করেছি। berries ম্যানিপুলেট করলে fruits-ও পরিবর্তন হয়।
জাভাস্ক্রিপ্ট অ্যারে কপি করার পদ্ধতি
অ্যাসাইনমেন্ট অপারেটর অ্যারে কপি করে না। আলাদা পদ্ধতি লাগে। তিনটি সেরা পদ্ধতি:
- স্প্রেড অপারেটর (...)
- ফর লুপ
Array.from()
স্প্রেড অপারেটর ব্যবহার
স্প্রেড অপারেটর (ES6) কোনো ইটারেবল অবজেক্টের কন্টেন্ট অ্যাক্সেস করতে দেয়। এটি শ্যালো কপি (shallow copy) বানাতে ব্যবহৃত হয়। তিনটি ডট (...) দিয়ে লিখা হয়।
var berries = ["Strawberry", "Gooseberry", "Raspberry"]; var fruits = [...berries]; fruits.push("Melon");
চেক করুন:
console.log(berries); console.log(fruits);
ফলাফল:
[ "Strawberry", "Gooseberry", "Raspberry" ] [ "Strawberry", "Gooseberry", "Raspberry", "Melon" ]
"Melon" শুধু fruits-এ যোগ হয়েছে। স্প্রেড অপারেটর দিয়ে আলাদা অ্যারে তৈরি হয়েছে।
ফর লুপ ব্যবহার
পুরনো কিন্তু কার্যকর পদ্ধতি। লাইন বেশি লাগে কিন্তু ভালো কাজ করে।
var berries = ["Strawberry", "Gooseberry", "Raspberry"]; var fruits = []; for (var i = 0; i < berries.length; i++) { fruits[i] = berries[i] }
টেস্ট করুন:
fruits.push("Grapefruit"); console.log(berries); console.log(fruits);
ফলাফল:
[ "Strawberry", "Gooseberry", "Raspberry" ] [ "Strawberry", "Gooseberry", "Raspberry", "Grapefruit" ]
সফল! দুটি আলাদা অ্যারে।
Array.from() ব্যবহার
Array.from() যেকোনো ইটারেবল অবজেক্টকে অ্যারে বানায়। এটি অ্যারে কপি করতেও ব্যবহার করা যায়।
var berries = ["Strawberry", "Gooseberry", "Raspberry"]; var fruits = Array.from(berries);
স্প্রেড অপারেটরের মতোই সংক্ষিপ্ত। টেস্ট করুন:
fruits.push("Pineapple"); console.log(berries); console.log(fruits);
ফলাফল:
[ "Strawberry", "Gooseberry", "Raspberry" ] [ "Strawberry", "Gooseberry", "Raspberry", "Pineapple" ]
সফলভাবে কপি হয়েছে।
উপসংহার
জাভাস্ক্রিপ্টে অ্যারে কপি করা সহজ যদি পদ্ধতি জানেন। অ্যাসাইনমেন্ট অপারেটর আলাদা অ্যারে তৈরি করে না, রেফারেন্স তৈরি করে। স্প্রেড অপারেটর, ফর লুপ, বা Array.from() ব্যবহার করে আলাদা অ্যারে তৈরি করা যায়।
এখন আপনি একজন এক্সপার্টের মতো জাভাস্ক্রিপ্টে অ্যারে কপি করতে পারবেন।