複数のオブジェクトを1つのオブジェクトにマージする方法

2479 ワード

一、Object.assign()
 Object.assign()メソッドは、すべての列挙可能な属性の値を1つ以上のソースオブジェクトからターゲットオブジェクトにコピーするために使用されます.ターゲットオブジェクトが返されます.また、ソースオブジェクトも変更されます.
  const target = { a: 1, b: 2 };
  const source = { b: 4, c: 5 };

  const returnedTarget = Object.assign(target, source);

  console.log(target);
  // expected output: Object { a: 1, b: 4, c: 5 }

  console.log(returnedTarget);
  // expected output: Object { a: 1, b: 4, c: 5 }

 
ターゲットオブジェクトのアトリビュートに同じキーがある場合、アトリビュートはソースオブジェクトのアトリビュートによって上書きされます.後のソースオブジェクトのプロパティは、前のソースオブジェクトのプロパティと同様に上書きされます.複数のオブジェクトのマージをサポートします.ターゲットオブジェクトを変更したくない場合は、ターゲットオブジェクトを空{}に変更できます.
例えば、const returnedTarget=Object.assign( {} , source,source); Object.assignメソッドは、ソースオブジェクト自体の、列挙可能な属性のみをターゲットオブジェクトにコピーします.この方法は、ソースオブジェクトの[[Get]]とターゲットオブジェクトの[[Set]]を使用するので、関連するgetterとsetterが呼び出されます.したがって、新しいプロパティをコピーまたは定義するだけでなく、プロパティを割り当てます.マージソースにgetterが含まれている場合は、新しいプロパティをプロトタイプにマージするのに適していない可能性があります.属性定義(列挙可能性を含む)をプロトタイプにコピーするには、Object.getOwnPropertyDescriptor()およびObject.defineProperty()を使用します.StringタイプとSymbolタイプのプロパティがコピーされます.
エラーが発生した場合、たとえば属性が書き込み不可の場合、TypeErrorが発生し、エラーが発生する前に属性が追加された場合、targetオブジェクトを変更できます.Object.assignは、sourceのオブジェクト値がnullまたはundefinedである場合にエラーを投げ出すことはありません.
 
二、循環遍歴を採用する
これはちょっと面倒です.
var obj1 = {name:'  '};
var obj2 = {age:18};
for (var key in obj2) {
 if (obj2.hasOwnProperty(key) === true){ //      obj2      
   obj1[key] = obj2[key];
  }
}
console.log(obj1);