web-dev-qa-db-ja.com

Typescript:あるタイプのオブジェクトの配列を別のタイプに変換する簡単な方法はありますか

だから、私は2つのクラスを持っています

Item { name: string; desc: string; meta: string}

ViewItem { name: string; desc: string; hidden: boolean; }

ViewItemの配列に変換する必要があるItemの配列があります。現在、forを使用して配列をループし、ViewItemをインスタンス化し、属性に値を割り当てて、2番目の配列にプッシュしています。

ラムダ式を使用してこれを達成する簡単な方法はありますか? (C#と同様)または他の手段はありますか?

19
Shilpa Nagavara

コードが十分に示されていないため、クラスをどのようにインスタンス化するかわかりませんが、いずれにしても 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);
}
27
Nitzan Tomer

別の方法は、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));

プレイグラウンドリンク

1
cyberpirate92