空数组中的打字稿搜索包括 metot

Typescript search in empty array includes metot

我正在按数组中的 ID 进行搜索。但是如果数组是空的,我希望所有的数据都来。我该怎么做?

selectedUrunGrubus: number[] = [];

urun: Urun[];

getUruns() {

this.generic?.Get_All("Uruns/Generic_Method").pipe(map(hizmets => hizmets.filter(hizmets => (this.selectedUrunGrubus.includes(hizmets.urunGrubuID) && this.selectedUrunGrubus.length>0)))).subscribe({
  next: (data) => { this.urun = data; console.log(this.urun) },
  error: (err) => { console.log(err) },
  complete: () => {
  
  }
});

}

this.urun = [id=1] [id=2] [id=3] [id=4];
if(selectedUrunGrubus == [1,2])
{
this.urun = [id=1] [id=2]
}
if(selectedUrunGrubus == empty)
{
this.urun = [id=1] [id=2] [id=3] [id=4]
}

您的数组为空的原因是因为过滤器中的 this.selectedUrunGrubus.length>0 条件。 selectedUrunGrubus 的长度从 0 开始,所以表达式总是 false.

这是您可以使用的另一种策略。将过滤后的数组分配给一个变量,然后 return 为任一情况的三元表达式。

selectedUrunGrubus: number[] = [];

urun: Urun[];

getUruns() {

this.generic?.Get_All("Uruns/Generic_Method")
  .pipe(
    map(hizmets =>{ 
      const matches = hizmets.filter(hizmet => this.selectedUrunGrubus.includes(hizmet.urunGrubuID));
      return !!matches.length ? matches : hizmets;
    }),
    tap(urun=> this.urun = urun)
  ).subscribe();
}

注:

  • 我使用双刘海 !! 将长度转换为布尔值(因为 0 是假的)
  • 使用 tap() 来处理副作用,例如 属性 赋值。
  • subscribe() 中的其余逻辑是默认行为,因此您可以在最后使用基本的 subscribe()