2017-12-18 1 views
0

私はAngular 5プロジェクトに取り組んでおり、配列に対してはAddとRemoveの機能があります。角度5 - 編集配列機能 - 方法

は、下記を参照してください:

私は最終的に私は、現在の配列オブジェクトを編集することができます..私はこれを行うにはどうすればよい

をEDIT機能として必要なもの

addIT() { 
    this.widgets.push({ id: 1, title: 'widget', config: { sizex: 1 } }); 
} 

+1

['Array.prototype.find()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)はあなたが探しているものです – mhodges

答えて

1

あなたが欲しい要素をつかむためにArray.prototype.find()を使用して、あなたがそうのように、必要なものは何でも変更することができます:あなたが一度に複数の編集を行いたい場合は、代わりに

editIT(id, prop, value) { 
    var elem = this.widgets.find(elem => elem.id === id); 
    if (elem !== null) { 
    elem[prop] = value; 
    } 
} 

、あなたが渡すことができますオブジェクトとそのように、Object.prototype.assignを使用します。

editIT(id, changes) { 
    var elem = this.widgets.find(elem => elem.id === id); 
    if (elem !== null) { 
    elem = Object.assign(elem, changes); 
    } 
} 

をネストされたプロパティを処理するには、上記第1の溶液に、以下の変更を使用することができます

editIT(id, prop, value) { 
    var elem = this.widgets.find(elem => elem.id === id); 
    if (elem !== null) { 
     var props = prop.split("."); 
     // grab all except last property - we want the last property's containing object 
     var propToEdit = props.slice(0, props.length-1).reduce(function (el, _prop) { 
      // return nested object until last containing object 
      return el[_prop]; 
     }, elem); 
     // set value on last property's containing object to the value passed in 
     propToEdit[props[props.length-1]] = value; 
    } 
} 
+0

の場合sizexプロパティはどのように変更しますか?疲れているeditIT(1、config.sizex、2);しかし何も起こらない – max2020

+0

@ max2020まあ、それを行うにはかなり多くのコードが必要です。しかし、区切り文字列を小道具として渡す限り、すばやく汚れても構いません。私はそれに応じて投稿を編集することができます。 – mhodges

+0

@ max2020更新:それを確認してください – mhodges

関連する問題