だから、私は2つのクラスを持っています
Item { name: string; desc: string; meta: string}
ViewItem { name: string; desc: string; hidden: boolean; }
ViewItemの配列に変換する必要があるItemの配列があります。現在、forを使用して配列をループし、ViewItemをインスタンス化し、属性に値を割り当てて、2番目の配列にプッシュしています。
ラムダ式を使用してこれを達成する簡単な方法はありますか? (C#と同様)または他の手段はありますか?
コードが十分に示されていないため、クラスをどのようにインスタンス化するかわかりませんが、いずれにしても array map function を使用できます。
class Item {
name: string;
desc: string;
meta: string
}
class ViewItem {
name: string;
desc: string;
hidden: boolean;
constructor(item: Item) {
this.name = item.name;
this.desc = item.desc;
this.hidden = false;
}
}
let arr1: Item[];
let arr2 = arr1.map(item => new ViewItem(item));
( 遊び場のコード )
これはObject.assign
で短くできます:
constructor(item: Item) {
Object.assign(this, item);
}
別の方法は、Object.keys
を使用することです。
class Item {
name: string;
desc: string;
meta: string
}
class ViewItem {
name: string;
desc: string;
hidden: boolean;
// additional properties
additionalProp: boolean;
constructor(item: Item) {
Object.keys(item).forEach((prop) => { this[prop] = item[prop]; });
// additional properties specific to this class
this.additionalProp = false;
}
}
使用法:
let arr1: Item[] = [
{
name: "John Doe",
desc: "blah",
meta: "blah blah"
}
];
let arr2: ViewItem[] = arr1.map(item => new ViewItem(item));