Array.fill() মেথড ব্যবহার করে অবজেক্ট বানালে সব ইনডেক্সে একই অবজেক্টের রেফারেন্স থাকে। একটিতে পরিবর্তন করলে সবগুলোতে পরিবর্তন হয়। সমাধান: map() ব্যবহার করুন।
সমস্যাযুক্ত কোড
// ভুল পদ্ধতি - সব ইনডেক্সে একই অবজেক্ট রেফারেন্স
const arr = new Array(5).fill({});
arr[0].name = 'John';
console.log(arr); // [{name: 'John'}, {name: 'John'}, {name: 'John'}, {name: 'John'}, {name: 'John'}]
সঠিক সমাধান: map() ব্যবহার করুন
সিনট্যাক্স
var anyVariableName = new Array(yourSize).fill().map(Object);
উদাহরণ কোড
var arrayOfObject = new Array(5).fill().map(Object);
console.log(arrayOfObject);
চলানো পদ্ধতি
প্রোগ্রামটি রান করতে নিচের কমান্ড ব্যবহার করুন:
node fileName.js
এখানে ফাইল নাম demo311.js।
আউটপুট
PS C:\Users\Amit\javascript-code> node demo311.js
[ {}, {}, {}, {}, {} ]
ব্যাখ্যা
new Array(5)- ৫ লেন্থের খালি অ্যারে (empty slots).fill()- আর্গুমেন্ট ছাড়া কল করলে empty slots কেundefinedদিয়ে ফিল করে.map(Object)- প্রতিটিundefinedকেObjectকনস্ট্রাক্টর দিয়ে পাস করে, নতুন খালি অবজেক্ট{}তৈরি করে- ফলাফল: ৫টি স্বতন্ত্র খালি অবজেক্ট
অন্যান্য সঠিক পদ্ধতিসমূহ
// 1. Array.from
Array.from({ length: 5 }, () => ({}));
// 2. Spread with map
[...new Array(5)].map(() => ({}));
// 3. Loop (সবচেয়ে স্পষ্ট)
const arr = [];
for (let i = 0; i < 5; i++) {
arr.push({});
}
// 4. Fill with null then map (যদি initial value দরকার হয়)
new Array(5).fill(null).map(() => ({ id: 0, name: '' }));
কেন fill({}) কাজ করে না?
fill একই অবজেক্ট রেফারেন্স কপি করে সব ইনডেক্সে। map প্রতিবার নতুন অবজেক্ট তৈরি করে।