2016-11-30 20 views
6

So, mam dwie klasyTypescript: Czy istnieje prosty sposób przekonwertować tablicę obiektów jednego typu na inny

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

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

Mam tablicę element, który musi zostać przekształcony tablicy ViewItem . Obecnie przechodzę przez tablicę za pomocą for, tworząc instancję ViewItem, przypisując wartości atrybutom i przesuwając je do drugiej tablicy.

Czy istnieje prosty sposób osiągnięcia tego za pomocą wyrażeń lambda? (podobny do C#) Czy jest jakiś inny sposób?

Odpowiedz

10

nie wykazały wystarczającej ilości kodu, więc nie jestem pewien, jak można instancję swoje klasy, ale w każdym przypadku można użyć 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

Dzięki bardzo Nitzan –

0

alternatywną metodą jest użycie 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; 
    } 
} 

Zastosowanie:

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

Playground link