2016-10-19 18 views
2

これらのオブジェクトをスプレッド演算子にマージするのと同じことは何ですか?私は私のreduxアプリで代入の代わりに普及を使用したいと思います。オブジェクトのスプレッド演算子の代入

return Object.assign({}, obj1, obj2)

答えて

3

同等物は次のようになります

return { ..obj1, ...obj2 }; 

しかし、これは(例えばバベルによって)transpilingなしで動作しません、オブジェクトの残りの広がりがステージ3勧告であり、サポートされないように現在のブラウザではbabelを使用する場合は、Object rest spread transform babelプラグインまたはbabel stage-3 presetを使用する必要があります。

+0

この場合、オブジェクト内のプロパティを更新すると、 '{... obj1、obj1property:{... obj1.obj1property、... obj2}'が返されます。 – Jan

+0

は動作しません、**予期しない '...' **。 –

+1

@ NinaScholz - あなたはそれが動作する前にそれを蒸散しなければならないでしょう(ステージ3勧告)。 –

2

としてはdocsで説明:

注: アレイをコピーしながら、典型的ES6における拡散演算子は一段階深い進みます。したがって、それらは多次元配列 のコピーには適していません。 Object.assignと オブジェクトスプレッド演算子の場合も同じです。以下の例を参照して、より良い の理解を深めてください。

これは、新しいオブジェクトでスプレッドが行われるため、空のオブジェクトを渡す必要はありません。です。したがって、あなただけ行うことができます:ここに追加の注意点としては

return {...obj1, ...obj2} 

は、バベルが広がりオペレータをtranspiles方法です:

const a = {...obj1, ...obj2}

は次のようになります。

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; 

var a = _extends({}, obj1, obj2); 

See for yourself

+0

に結果を割り当てます。**予期しない '...' **。 –

+1

@ NinaScholzこれはES6構文で、babelなどのプリコンパイラを使用する必要があります。それで失敗しますか? –

+0

、それは動く。 –

関連する問題