【问题标题】:angular filter does not filter elements out角度过滤器不会过滤掉元素
【发布时间】:2018-11-26 20:08:41
【问题描述】:

我正在使用过滤器函数从数组中过滤对象。 问题:元素保留在数组中,即使它们不应该!尽管我使用了过滤器,为什么这些对象仍保留在数组中?

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

这里的过滤器在同一个类中使用:

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

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

感谢您的帮助。

【问题讨论】:

  • 尝试删除 try-catch 以查看是否抛出任何错误。
  • 为什么我的回答被否决了?如果它不起作用,您应该提及它,

标签: angular typescript filter ecmascript-6


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    来自here

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

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

    此外,您不需要在 filterPspDeliveries 方法上使用 async 关键字,因为您无需等待任何内容。

    解决方案是:

    解决方案 1

    删除await keywork 关键字:

     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

    【讨论】:

      【解决方案3】:

      改成这样怎么样:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 2020-12-02
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多