2016-11-30 5 views
6

に1種類のオブジェクトの配列を変換する簡単な方法がありますが、私は2つのクラス活字体:だから別の

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

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

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

ラムダ式を使ってこれを達成する簡単な方法はありますか? (C#に似ています) 他の手段がありますか?

答えて

10

あなたはあなたのコードを十分に示していないので、私はあなたのクラスをインスタンス化方法がわからないんだけど、どのような場合にあなたが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)); 

code in playground

+0

どうもありがとうございましたNitzan –

0

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

Playground link