typescript如何将两个对象组合成一个数组

时间:2017-10-17 17:36:47

标签: typescript

我是打字稿的新手。

我有两个Student类对象。可能是AStudent和BStudent 现在我想要一个方法,它返回一个组合数组,包含它们是否为空

如果两者都不为null,则数组将为[AStudent,BStudent];如果AStudent不为空且BStudent为null,则数组将为[AStudent]

如何在打字稿中实现这一目标?

由于

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以将所有内容添加到数组中,然后使用Array.filter

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

答案 2 :(得分: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);

答案 3 :(得分: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);
   }
}