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

Большое спасибо НИЦАН –

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