2017-10-17 630 views
-1

我是打字稿的新手。typescript如何將兩個對象組合成一個數組

我有兩個學生類的對象。可以是AStudent和BStudent 現在我想有返回包含如果它們不爲空

如果兩者不爲空的組合陣列的方法,陣列將是[AStudent,BStudent]; IF AStudent不爲空並且BStudent是null,數組將會是[AStudent]

如何在打字稿中實現這個?

感謝

+0

真的很大程度上取決於您如何獲取對象,代碼示例或最小可驗證示例是首選。 –

+0

'let arr = []; if(AStudent!= null)arr.push(AStuden); ...' - 重複'BStudent',返回。 – tymeJV

+0

我希望一些打字稿的解決方案,而不是普通的,如果其他 – Jocket

回答

1

您可以只需添加一切到一個數組,然後使用Array.filter

let arr = [AStudent, BStudent].filter(s => !!s); 
+0

如何檢查S truthy than null,使undefiend,null被捕獲? – Jocket

+0

@Jocket - 做了一個編輯,將解釋這一點 – tymeJV

1
combineTwoObject(obj1 = null, obj2 = null) { 
    let objArray = []; 
    if(obj1 != null) 
    objArray.push(obj1); 
    if(obj2 != null) 
    objArray.push(obj2); 
    return objArray; 
} 
1

您可以使用一個很抽象的方法來實現這一目標,這將滿足您的兩個首發的情況下,學生,而且還允許您使用其他類型的功能以及其他大小的集合。我也冒着處理nullundefined的自由。

function definedObjects<T>(...obj: T[]): T[]{ 
    return obj.filter(s => !!s); 
} 

interface Student { 
    name: string; 
} 

var studentA: Student = { name: 'Steve' }; 
var studentB: Student = { name: 'Jocket' }; 
var studentC: Student; // undefined 
var studentD: Student = null; 

const result = definedObjects(studentA, studentB, studentC, studentD); 
0

你失去了一些靈活性,但另一種方法是用一個不接受undefined擴展Array類。就像這樣:

export class NoUndefinedArray<T> extends Array<T> { 

    constructor() { 
     super(); 
    } 

    push(item: T) { 
     if (item !== undefined) { 
     super(push); 
     } 
    } 

    concat(item: T | T[]) { 
     const arr = [].concat(item).filter(i => i !== undefined); 
     return super(arr); 
    } 
} 
相關問題