角度滤镜不会滤除元素

时间:2018-11-26 20:08:42

标签: angular typescript filter ecmascript-6

我正在使用过滤器功能从数组中过滤出对象。 问题:即使元素不存在,元素也会保留在数组中!为什么在使用过滤器时这些对象仍保留在数组中?

FILE_SKIP_EMPTY_LINES

此过滤器在同一类中使用:

async filterPspDeliveries(pspDeliveryList: PspDelivery[]){
    try {
        return pspDeliveryList.filter(pspDelivery => pspDelivery.packageList.length > 0);
    } catch(e) {
      console.log(e);
    }
}

注意:我只想过滤掉不包含包裹清单的送货。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

尝试捕获在这里没有意义,因为.filter函数将始终成功。尝试替换为以下内容!:

function filterPspDeliveries(pspDeliveryList: PspDelivery[]) {
    return pspDeliveryList.filter(pspDelivery => pspDelivery.packageList && pspDelivery.packageList.length > 0);
}

答案 1 :(得分:0)

来自here

  

await运算符用于等待Promise。只能使用   在异步函数中。

问题是您正在等待不返回Promise的函数。相反,您的函数async filterPspDeliveries返回的是PspDelivery数组。

此外,由于您不需要等待任何操作,因此您不需要在async方法上使用filterPspDeliveries关键字。

解决方案可以是:

解决方案1 ​​

删除await键盘关键字:

 for(let psp of pspList){
      let tmpDeliveryList =  this.filterPspDeliveries(psp.deliveryList);
      psp.deliveryList = tmpDeliveryList;
    }

解决方案2

保留await关键字,但在filterPspDeliveries中返回承诺:

  filterPspDeliveries(pspDeliveryList: PspDelivery[]): Promise<PspDelivery[]> {
    try {
      return new Promise(resolve => {
        let result = pspDeliveryList.filter((pspDelivery) => {
          return (pspDelivery.packageList.length > 0);
        })
        resolve(result);
        return;
      });
    } catch (e) {
      console.log(e);
    }
  }


for(let psp of pspList){
      let tmpDeliveryList = await this.filterPspDeliveries(psp.deliveryList);
      psp.deliveryList = tmpDeliveryList;
    }

您可以通过两种解决方案here对其进行检查。

答案 2 :(得分:-2)

该如何更改:

async filterPspDeliveries(pspDeliveryList: PspDelivery[]){
    try{
      return pspDeliveryList.filter((pspDelivery) => pspDelivery.packageList && pspDelivery.packageList.length > 0);
    } catch(e) {
      console.log(e);
    }
  }