2016-11-30 16 views
6

Vì vậy, tôi có hai lớpnguyên cảo: Có một cách đơn giản để chuyển đổi một mảng của các đối tượng của một loại khác

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

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

Tôi có một mảng khoản mà cần phải được chuyển đổi thành một mảng của ViewItem . Hiện tại, tôi đang lặp qua mảng sử dụng cho, instantiating ViewItem, gán giá trị cho các thuộc tính và đẩy nó vào mảng thứ hai.

Có cách nào đơn giản để đạt được điều này bằng các biểu thức lambda không? (tương tự C#) Hoặc có phương tiện nào khác không?

Trả lời

10

Bạn chưa thấy đủ mã của bạn, vì vậy tôi không chắc chắn làm thế nào bạn nhanh chóng lớp học của bạn, nhưng trong mọi trường hợp, bạn có thể sử dụng 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

Cảm ơn rất nhiều Nitzan –

0

một phương pháp thay thế là sử dụng 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; 
    } 
} 

cách sử dụng:

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

Playground link

Các vấn đề liên quan