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

JavaScript-এ অবজেক্টে প্রপার্টি কপি করা ওভাররাইট ছাড়া (hasOwnProperty)

JavaScript-এ `hasOwnProperty()` ব্যবহার করে সোর্ড অবজেক্টের প্রপার্টি টার্গেট অবজেক্টে কপি করা যায়, শর্ত থাকে টার্গেটে সেটি আগে থেকে নেই। এটি ডিফল্ট কনফিগারেশন মার্জের জন্য আদর্শ।

কোড উদাহরণ

var first = { key1: 100, key2: 40, key3: 70 };
var second = { key2: 80, key3: 70, key4: 1000 };

function mergeWithoutOverwrite(target, source) {
    for (let key in source) {
        // source-এ নিজস্ব প্রপার্টি আছে কিনা এবং target-এ নেই কিনা
        if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {
            target[key] = source[key];
        }
    }
    return target;
}

console.log(mergeWithoutOverwrite(first, second));
// { key1: 100, key2: 40, key3: 70, key4: 1000 }

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

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

আউটপুট

{ key1: 100, key2: 40, key3: 70, key4: 1000 }

ব্যাখ্যা

  • `key2` ও `key3` first-এ থাকায় কপি হয়নি (ওভাররাইট নেই)।
  • `key4` first-এ নাই, তাই কপি হয়েছে।
  • `hasOwnProperty` প্রোটোটাইপ চেইন থেকে ইনহেরিটেড প্রপার্টি বাদ দেয়।

আধুনিক পদ্ধতি: Object.assign + ফিল্টার

const mergeNoOverwrite = (target, source) => {
    const newKeys = Object.keys(source).filter(k => !target.hasOwnProperty(k));
    const additions = Object.fromEntries(newKeys.map(k => [k, source[k]]));
    return { ...target, ...additions };
};

ES2021: Object.hasOwn() (সেরা পদ্ধতি)

if (Object.hasOwn(source, key) && !Object.hasOwn(target, key)) {
    target[key] = source[key];
}
// hasOwn() hasOwnProperty()-এর চেয়ে সেফ (null-প্রোটোটাইপ অবজেক্টেও কাজ করে)

ডিপ মার্জ (Nested Objects)

নেস্টেড অবজেক্টের জন্য রিকারসিভ ফাংশন বা Lodash `_.defaultsDeep()` ব্যবহার করুন।

ব্যবহার ক্ষেত্র

  • ডিফল্ট কনফিগারেশন + ইউজার কনফিগারেশন মার্জ
  • ফর্ম ডেটা + ডিফল্ট ভ্যালু
  • থিম অপশন মার্জ (বেস থিম + কাস্টম থিম)
  1. জাভাস্ক্রিপ্ট অবজেক্ট প্রপার্টি যোগ, অ্যাক্সেস এবং ডিলিট করার পদ্ধতি

  2. জাভাস্ক্রিপ্টে একটি ফাংশন থেকে অন্য ফাংশনে ইভেন্ট অবজেক্ট পাস করা

  3. জাভাস্ক্রিপ্টে অন্য অবজেক্ট দিয়ে অবজেক্ট অ্যাক্সেস করা

  4. জাভাস্ক্রিপ্টে বিদ্যমান অবজেক্টে প্রোপার্টি ও মেথড যোগ করা