javascript - অবশ্যই ES6+একসাথে দুটি জাভাস্ক্রিপ্ট বস্তু একত্রিত করার একটি উপায় থাকতে হবে, এটা কি?



জাভাস্ক্রিপ্ট দিয়ে কি কি করা যায় (4)

আমি সবসময় এই ধরনের কোড লিখতে ক্লান্ত হয়ে ক্লান্ত হয়ে পড়েছি:

function shallowExtend(obj1,obj2){
  var key;
  for ( key in obj2 ) {
    if ( obj2.hasOwnProperty(key) === false )  continue;
    obj1[key] = obj2[key]
  }
}

অথবা যদি আমি নিজেই কোডটি লিখতে চাই না, তবে এটি ইতিমধ্যেই এমন একটি লাইব্রেরি প্রয়োগ করুন। নিশ্চিতভাবেই ES6 + রেসকিউ এ আসছে এইটি আমাদেরকে একটি Object.prototype.extend(obj2...) বা Object.extend(obj1,obj2...)

তাই ES6 + যেমন কার্যকারিতা প্রদান করে? যদি না ইতিমধ্যে সেখানে, যেমন কার্যকারিতা পরিকল্পিত হয়? পরিকল্পনা না হলে কেন নয়?

https://src-bin.com


Answer #1

ES6

Object.assign(o1,o2) ; 
Object.assign({},o1,o2) ; //safe inheritance
var copy=Object.assign({},o1); // clone o1
//------Transform array of objects to one object---
var subjects_assess=[{maths:92},{phy:75},{sport:99}];
Object.assign(...subjects_assess); // {maths:92,phy:75,sport:99}

ES7 বা বাবেল

{...o1,...o2} // inheritance
 var copy= {...o1};

Answer #2

আপনি Object.assign ব্যবহার করে একটি অগভীর মার্জ / প্রসারিত / ES6 এ বরাদ্দ করতে সক্ষম হবেন:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

বাক্য গঠন:

Object.assign ( লক্ষ্য , ... উত্স );

যেখানে ... উৎস উৎস বস্তু (গুলি) প্রতিনিধিত্ব করে।

দ্রষ্টব্য: বিভ্রান্ত করবেন না ... একটি ES6 স্প্রেড অপারেটরের সাথে সিনট্যাক্স সংজ্ঞাগুলিতে উৎস

উদাহরণ:

var obj1 = {name: 'Daisy', age: 30};
var obj2 = {name: 'Casey'};

Object.assign(obj1, obj2);

console.log(obj1.name === 'Casey' && obj1.age === 30);
// true

Answer #3

আমি জানি এটি একটি পুরাতন সমস্যাটির একটি বিট তবে ES2015 / ES6 এ সহজতম সমাধানটি বস্তু। অ্যাসাইন () ব্যবহার করে বেশ সহজ,

আশা করি এই সাহায্য করে, এই DEEP এছাড়াও মার্জ করে তোলে :

/**
 * Simple is object check.
 * @param item
 * @returns {boolean}
 */
export function isObject(item) {
  return (item && typeof item === 'object' && !Array.isArray(item) && item !== null);
}

/**
 * Deep merge two objects.
 * @param target
 * @param source
 */
export function mergeDeep(target, source) {
  if (isObject(target) && isObject(source)) {
    for (const key in source) {
      if (isObject(source[key])) {
        if (!target[key]) Object.assign(target, { [key]: {} });
        mergeDeep(target[key], source[key]);
      } else {
        Object.assign(target, { [key]: source[key] });
      }
    }
  }
  return target;
}

উদাহরণ ব্যবহার:

mergeDeep(this, { a: { b: { c: 123 } } });
// or
const merged = mergeDeep({a: 1}, { b : { c: { d: { e: 12345}}}});  
console.dir(merged); // { a: 1, b: { c: { d: [Object] } } }





ecmascript-6