複数のオブジェクトを1つのオブジェクトにマージする方法
2479 ワード
一、Object.assign()
Object.assign()メソッドは、すべての列挙可能な属性の値を1つ以上のソースオブジェクトからターゲットオブジェクトにコピーするために使用されます.ターゲットオブジェクトが返されます.また、ソースオブジェクトも変更されます.
ターゲットオブジェクトのアトリビュートに同じキーがある場合、アトリビュートはソースオブジェクトのアトリビュートによって上書きされます.後のソースオブジェクトのプロパティは、前のソースオブジェクトのプロパティと同様に上書きされます.複数のオブジェクトのマージをサポートします.ターゲットオブジェクトを変更したくない場合は、ターゲットオブジェクトを空{}に変更できます.
例えば、const returnedTarget=Object.assign( {} , source,source);
エラーが発生した場合、たとえば属性が書き込み不可の場合、
二、循環遍歴を採用する
これはちょっと面倒です.
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);