web-dev-qa-db-ja.com

Object.assign(... array)の代替

オブジェクトの配列があると仮定します。

Object.assign(...array)を呼び出すと、インデックスiを持つオブジェクトがインデックス_i-1_を持つオブジェクトの既存のプロパティをオーバーライドするオブジェクト間で継承が行われます

例えば:

_var array=[{interf:'IPerson',name:'Someone'},{clss:'Person',name:'Ahmed'},{student:true}];
console.log(
    Object.assign(...array) // Object.assign(array[0],array[1],array[2])
)_

提案されたオブジェクトスプレッド構文でBabelを使用すると、これを静的に行うことができます。

_{...array[0],...array[1],...array[2]} // spread used for each object not for array
_

それを動的に行う方法?

「スプレッド構文」のコンテキストの重複があります。私は両方にスプレッド構文を使用する方法を意味します:

  • 配列が要素を広げるために。
  • 出力リテラルオブジェクト_{}_が継承を行う場合

_{...array}_を試しましたが、_{0:<array[0]>,1:<array[1]>,2:<array[2]>}_を返します。これはnotObject.assign(...array)と同じ出力です。

25
Abdennour TOUMI

あなたは探している

var obj = Object.assign({}, ...array)

array[0]を変更する代わりに新しいオブジェクトを作成します。

31
Bergi

あなたが探しているメソッドは.concat()です

ターゲットとソースのマージである新しい配列を返します。