Object.assign
オブジェクトをマージするための方法は、全ての列挙属性のソースオブジェクト(ソース)は、対象物(ターゲット)にコピーします。
CONSTターゲット= {1 }。 CONSTソース1 = {B:2 }。 CONSTソース2 = {C:3 }。 Object.assign(ターゲット、ソース1、ソース2)。 ターゲット// {:1、B:2、C 3}
Object.assign
最初のパラメータは、ソース・オブジェクトのパラメータが後ろにあり、ターゲット・オブジェクトのメソッドです。
ソースオブジェクトとターゲットオブジェクトは、以前の属性上書き属性後、同じ名前の属性、または同じname属性のソースオブジェクトを複数有している場合ことに留意されたいです。
CONSTターゲット= {1、B:1 }。 CONSTソース1 = {B:2、C:2 }。 CONSTソース2 = {C:3 }。 Object.assign(ターゲット、ソース1、ソース2)。 ターゲット// {:1、B:2、C 3}
注意点
(1)浅いコピー
Object.assign
この方法ではなく、深いコピーよりも、簡易コピーを実践されています。つまり、ソースオブジェクトがオブジェクトである場合、プロパティの値は、ターゲットオブジェクトのコピーが、オブジェクトへの参照になってしまいます。
CONST OBJ1 = {{B:1 ;}} CONST OBJ2 = Object.assign({}、OBJ1)。 obj1.ab = 2 。 obj2.ab // 2
上記のコードでは、ソース・オブジェクトobj1
のa
属性の値は、オブジェクトであるObject.assign
得られたコピーはオブジェクトへの参照です。このオブジェクトの変更は、宛先オブジェクトに反映されます。
同じname属性の(2)の交換
このネストされたオブジェクトの場合、同じ名前のイベント属性は、Object.assign
処理方法ではなく追加するよりも、交換することです。
CONSTターゲット= {{B 'C'、D 'E' }} CONSTソース = {{B 'ハロー' }} Object.assign(ターゲット、ソース) // {{B: 'こんにちは' } }
上記のコードは、target
オブジェクトのa
属性はsource
、オブジェクトa
を取得しないが、置換全体の特性{ a: { b: 'hello', d: 'e' } }
結果を。これにより、開発者は、欲しい特別なケアを必要としない通常です。
いくつかのライブラリが提供するObject.assign
(例えばLodashのようなカスタマイズされたバージョンの_.defaultsDeep
ディープコピーを得ることができる方法を)。
(3)処理アレイ
Object.assign
アレイを処理するために使用することができるが、アレイは、オブジェクトとして扱われます。
Object.assign([1、2、3]、[4、5 ]) // [4,5、3]
上記のコードでは、Object.assign
0,1,2という名前のオブジェクトのプロパティとして配列は、ソース配列プロパティ0は4
、標的配列の0性質をカバー1
。
工程(4)関数の値
Object.assign
その後、評価され、その後、コピー、値のみをコピーし、あなたが値をコピーしたい場合は、値の関数です。
CONSTソース= { GETのfoo(){ リターン 1 } }。 CONST目標 = {}; Object.assign(ターゲット、ソース) // {FOO:1}
上記のコードは、source
オブジェクトのfoo
属性値は、関数でObject.assign
、過去にこの値をコピーして、値を取得するだけで、後に、関数の値をコピーしません。