2017-10-24 19 views
1

typescriptを使用して配列に一括更新を行いたい。配列内の複数のオブジェクトを更新する

私はforループを使ってやりました。

this.versions = [{ id: 1, VersionName: 'test1' }, { id: 2, VersionName: 'test2' }, { id: 3, VersionName: 'test3' }, { id: 4, VersionName: 'test4' }]; 
 
this.selectedVersions = [{ id: 2, VersionName: 'test2' }, { id: 3, VersionName: 'test3' }]; 
 
for (let i = 0; i < this.selectedVersions.length; i++) { 
 
    this.versions = this._configuration.updateEveryObjectsByKey(this.versions, this.selectedVersions[i], "Id"); 
 
} 
 

 
updateEveryObjectsByKey(listOfdata: any, data: any, key: string) { 
 
    listOfdata = listOfdata.map(function (item) { 
 
    return item[key] == data[key] ? data : item; 
 
    }) 
 
    return listOfdata; 
 
}

しかし、私はforループを使用することを好きではありません。ですから、typescriptを使って配列に一括更新する方法を教えてください。

+0

[あなたは25分前に聞かれる質問](約何https://stackoverflow.com/questions/46913059/bulk-delete-in-array-by-using-typescript)?それは7つの答えがあります。 –

+0

これは、findIndexまたはfilterを使用して複数の削除に関連しています。しかし、この複数の更新はmapなどを使って行います。だから私は別の質問をしました。 –

+1

Ok、公正な –

答えて

4

あなたがES6のObject.assign使用することができ、array.mapをarray.find:

var versions = [{ id: 1, VersionName: 'test1' }, { id: 2, VersionName: 'test2' }, { id: 3, VersionName: 'test3' }, { id: 4, VersionName: 'test4' }]; 
 
var selectedVersions = [{ id: 2, VersionName: 'test2 update' }, { id: 3, VersionName: 'test3' }]; 
 
var key = "id"; 
 
versions = versions.map(el => { 
 
    var found = selectedVersions.find(s => s[key] === el[key]); 
 
    if (found) { 
 
     el = Object.assign(el, found); 
 
    } 
 
    return el; 
 
}); 
 
console.log(versions);

+1

このソリューションでは、比較に使用されるキーは 'id'にハードコードされ、OPは現在のコードで動的に設定されます。 – BeetleJuice

+0

@BeetleJuice正確に何を入力していますか?私はidの代わりにkeyを使ってそれにしたい。なぜなら私はこの方法を共通の方法として使用するからです。 :) –

+1

だから、 's.id === el.id'を' s [key] === el [key] 'に変更する必要があると思いますか? –

関連する問題