কম্পিউটার টিউটোরিয়াল

জাভাস্ক্রিপ্টে Array.prototype.fill() অবজেক্ট রেফারেন্স সমস্যা এবং সমাধান

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 প্রতিবার নতুন অবজেক্ট তৈরি করে।

  1. জাভাস্ক্রিপ্টে new কীওয়ার্ড দিয়ে অ্যারে তৈরির পদ্ধতি

  2. জাভাস্ক্রিপ্টে Map অবজেক্ট

  3. জাভাস্ক্রিপ্ট অবজেক্টকে নতুন অ্যারেতে ফরম্যাট করা

  4. জাভাস্ক্রিপ্টে Object.keys().map() VS Array.map()