Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
typescript如何将两个对象合并为一个数组_Typescript - Fatal编程技术网

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

typescript如何将两个对象合并为一个数组,typescript,Typescript,我是打字新手 我有两个学生班的目标。可能是一个学生和一个学生 现在我想要一个方法,它返回一个组合数组,如果它们不为null,则包含 如果两者都不为null,则数组将为[AStudent,BStudent];如果AStudent不为空且BStudent为null,则数组将为[AStudent] 如何在typescript中实现这一点 谢谢您可以将所有内容添加到数组中,然后使用array.filter 您可以使用一个非常抽象的方法来实现这一点,这将适合从两个学生开始的情况,但也允许您将该函数用于其他

我是打字新手

我有两个学生班的目标。可能是一个学生和一个学生 现在我想要一个方法,它返回一个组合数组,如果它们不为null,则包含

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

如何在typescript中实现这一点


谢谢

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


您可以使用一个非常抽象的方法来实现这一点,这将适合从两个学生开始的情况,但也允许您将该函数用于其他类型和其他大小的集合。我还可以自由地处理null和undefined


您会失去一些灵活性,但另一种方法是使用不接受未定义的数组类扩展数组类。大概是这样的:

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);
   }
}

这在很大程度上取决于如何获取对象,最好是代码示例或最小可验证示例;如果你是学生空arr.pushAStuden;…-对BStudent重复,返回。我希望一些类型脚本解决方案,而不是简单的如果else@Jocket-普通if/else有什么问题?它适合你的情况。您可以执行[AStudent,BStudent]。过滤器=>s!=无效@tymeJV你能把这个过滤器的完整版本作为答案发布吗?我会尝试一下如何检查S是否为truthy而不是null,以便捕获未定义的null?
let arr = [AStudent, BStudent].filter(s => !!s);
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);
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);
   }
}