2017-10-17 109 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); 
    } 
} 
相关问题