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

JavaScript-এ লুপ ছাড়া অ্যারে এলিমেন্ট আপডেট করা (filter + map)

JavaScript-এ `filter()` এবং `map()` চেইন করে লুপ ছাড়া নির্দিষ্ট শর্ত পূরণ করা অবজেক্টের প্রপার্টি আপডেট করা যায়। এটি ফাংশনাল প্রোগ্রামিং স্টাইল।

ডেটা

const students = [
    { Name: "John" },
    { Name: "David" },
    { Name: "Bob" },
    { Name: "Mike" }
];

ফিল্টার + ম্যাপ পদ্ধতি

const targetName = "Bob";
const newName = "Carol";

// ফিল্টার করে ম্যাপে আপডেট
students
    .filter(obj => obj.Name === targetName)
    .map(obj => obj.Name = newName);

console.log(students);

চলানোর পদ্ধতি

  1. কোডটি updateNoLoop.js নামে সংরক্ষণ করুন।
  2. টার্মিনালে চালান: node updateNoLoop.js

আউটপুট

[
  { Name: 'John' },
  { Name: 'David' },
  { Name: 'Carol' },
  { Name: 'Mike' }
]

কীভাবে কাজ করে

  • `filter()` - শর্তমত অবজেক্টগুলো সিলেক্ট করে (রেফারেন্স রিটার্ন করে)।
  • `map()` - সিলেক্টেড অবজেক্টগুলোতে মিউটেশন করে (`obj.Name = newName`)。
  • মূল অ্যারে `students` মিউটেট হয় (রেফারেন্স একই)۔

নন-মিউটেটিং ভার্সন (ইমিউটেবল)

const updated = students.map(obj => 
    obj.Name === targetName ? { ...obj, Name: newName } : obj
);
// মূল students অপরিবর্তিত, নতুন অ্যারে updated

findIndex + সরাসরি আপডেট (সিনপ্লিস্ট)

const idx = students.findIndex(obj => obj.Name === targetName);
if (idx !== -1) students[idx].Name = newName;

তুলনা

পদ্ধতিমিউটেশনরিডেবিলিটিপারফরম্যান্স
filter+mapহ্যাঁ (মূল বদলায়)মিডিয়ামO(n) + O(m)
map (immutable)নাউচ্চO(n)
findIndex + directহ্যাঁউচ্চO(n) সেরা
for loopহ্যাঁউচ্চO(n) সেরা

সতর্কতা

  • `filter().map()` প্যাটার্নে `map`-এ `return` না করলেও কাজ করে (মিউটেশন হয়) কিন্তু অ্যান্টি-প্যাটার্ন।
  • ইমিউটেবল প্যাটার্ন (নতুন অবজেক্ট রিটার্ন) রি‌অ্যাক্ট/রেডাক্স-এ বাধ্যতামূলক।
  1. জাভাস্ক্রিপ্টে অ্যারে এর মাধ্যমে লুপ চালানো

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

  3. জাভাস্ক্রিপ্ট রেগুলার এক্সপ্রেশন দিয়ে ম্যাচের ওপর লুপ চালানো

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