我正在使用过滤器功能从数组中过滤出对象。 问题:即使元素不存在,元素也会保留在数组中!为什么在使用过滤器时这些对象仍保留在数组中?
FILE_SKIP_EMPTY_LINES
此过滤器在同一类中使用:
async filterPspDeliveries(pspDeliveryList: PspDelivery[]){
try {
return pspDeliveryList.filter(pspDelivery => pspDelivery.packageList.length > 0);
} catch(e) {
console.log(e);
}
}
注意:我只想过滤掉不包含包裹清单的送货。
感谢您的帮助。
答案 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
关键字。
解决方案可以是:
删除await
键盘关键字:
for(let psp of pspList){
let tmpDeliveryList = this.filterPspDeliveries(psp.deliveryList);
psp.deliveryList = tmpDeliveryList;
}
保留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);
}
}