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
Javascript 如何检查管道中未定义的项目?_Javascript_Typescript_Angular - Fatal编程技术网

Javascript 如何检查管道中未定义的项目?

Javascript 如何检查管道中未定义的项目?,javascript,typescript,angular,Javascript,Typescript,Angular,我使用Angular2和自定义管道来过滤我的项目,如: transform(value: any, args: string[]): any { if (args) { return value.filter(foo => foo.url.indexOf(args) != -1) }; return value; } 但是我的foo.url项目中有一些未定义,我遇到了以下错误: TypeError:无法读取未定义的属性“indexOf” 如何检查属性是

我使用Angular2和自定义管道来过滤我的项目,如:

transform(value: any, args: string[]): any {
   if (args) {
         return value.filter(foo => foo.url.indexOf(args) != -1)
   };
   return value;
}
但是我的
foo.url
项目中有一些未定义,我遇到了以下错误:

TypeError:无法读取未定义的属性“indexOf”


如何检查属性是否未定义且将被过滤?

您正在使用TypeScript,因此是时候开始利用它带来的所有好处了。指定类型,而不是使用类型为
any
的参数编写此
transform
函数。这将有助于缓解像这样愚蠢的运行时问题。显然,您假设
value
参数是一个数组,因此将其声明为一个数组(我们将对返回类型执行相同的操作)。那么它是什么类型的阵列,让我们演示一下……而不是:

transform(value: any, args: string[]): any {
   if (args) {
         return value.filter(foo => foo.url.indexOf(args) != -1)
   };
   return value;
}
让我们这样写:

transform(value: Foo[], args: string[]): Foo[] {
   if (args) {
         return value.filter(foo => foo.url.indexOf(args) != -1)
   };
   return value;
}
然后我们可以有一个表示
Foo
的类:

export class Foo {
    constructor(url: string);
}
这将确保有助于防止在运行时属性
url
未定义时出现运行时问题。

您可以尝试以下方法:

transform(value: any, args: string[]): any {
  if (args) {
     return value.filter(foo => {
       return (foo.url && (foo.url.indexOf(args) != -1));
     });
  }
  return value;
}

你是说除了使用
if(!foo.url)
?另外,请阅读您添加到问题中的标签说明。两者都与Angular或JavaScript无关。对不起,我已经修复了…@mike mccaughan除此之外,你能告诉我我过滤函数中的语法吗?这将在你的开发中出现很多东西,我真的认为你应该先尝试一些东西。如果我用勺子喂你答案,你什么也学不到。