web-dev-qa-db-ja.com

オブジェクトの配列にプロパティを追加します

以下に示すオブジェクトの配列があります

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
1:Object
       id=2     
       name:'david'

このオブジェクトの配列の各要素に、Activeという名前のプロパティをもう1つ追加します。

最終結果は次のようになります。

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
       Active: "false"
1:Object
       id=2     
       name:'david'
       Active: "false"

誰かがこれを達成する方法を教えてください。

47
Patrick

forEach メソッドを使用して、配列内の各要素に対して提供された関数を1回実行できます。この提供された関数では、Activeプロパティを要素に追加できます。

Results.forEach(function (element) {
  element.Active = "false";
});
83
Tholle

またはmapを使用します

Results.map(obj=> ({ ...obj, Active: 'false' }))

@adrianolskによるコメントを反映するように編集され、オリジナルを変更せず、代わりにそれぞれの新しいオブジェクトを返します。

仕様を読む

78
sidonaldson

私もこの問題に思いつき、それを解決しようとして、アプリを実行していたchromeタブをクラッシュさせ続けました。 オブジェクトのスプレッド演算子 が原因だったようです。

上記のadrianolskのコメントとsidonaldsonの回答から少し助けを借りて、 Object.assign() babelのスプレッド演算子の出力を使用しました。

this.options.map(option => {
  // New properties to be added
  const newPropsObj = {
    newkey1:value1,
    newkey2:value2
  };

  // Assign new properties and return
  return Object.assign(option, newPropsObj);
});
1
Joel Balmer
  Object.defineProperty(Results, "Active", {value : 'true',
                       writable : true,
                       enumerable : true,
                       configurable : true});