2016-11-30 37 views
6

bir türdeki nesnelerin dizisi dönüştürmek için basit bir yolu var mı, İki sınıftypescript: Yani başka

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

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

Ben ViewItem bir diziye dönüştürülmesi gereken Item bir dizi var olması . Şu an için, ViewItem örneğini oluşturmak, özniteliklere değer atamak ve onu ikinci diziye aktarmak için dizi boyunca döngü yapıyorum.

Lambda ifadeleri kullanarak bunu başarmanın basit bir yolu var mı? (C# 'ye benzer) Veya başka herhangi bir araç var mı?

cevap

10

Kodunuzdaki yeterince gösterdi değildir, bu yüzden size sınıfları örneğini nasıl emin değilim, ama her durumda size array map function kullanabilirsiniz:

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

Çok teşekkürler Nitzan –

0

alternatif bir yöntem, Object.keys kullanmaktır

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; 
    } 
} 

kullanımı:

let arr1: Item[] = [ 
    { 
     name: "John Doe", 
     desc: "blah", 
     meta: "blah blah" 
    } 
]; 
let arr2: ViewItem[] = arr1.map(item => new ViewItem(item)); 

Playground link