2016-11-30 1 views
6

에 한 종류의 객체의 배열을 변환하는 간단한 방법이 있나요, 나는 두 개의 클래스타이프 : 그래서 다른

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

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

내가 ViewItem의 배열로 변환해야 할 항목의 배열을 가지고 있습니다 . 현재 배열을 반복하면서 ViewItem을 인스턴스화하고 속성에 값을 할당 한 다음 두 번째 배열로 푸시합니다.

람다 식을 사용하여이를 수행하는 간단한 방법이 있습니까? (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