迭代一个数组,用filter检查对象,跳过空值



所以我用对象迭代一个数组,并检查特定的id,当它有id时,这很好,但有时它是null,当它抛出错误时,无法读取null或类似的属性。

这是我的函数,我想检查一下这个情况,如果它为null,那么跳过它,不要迭代那个对象,这样我就可以避免这个错误:

以下是功能:

const d = vehicles.vehicles.filter((vehicle) => vehicle.owner._id === quick.temp.customer._id);

如果变量是对象,可以添加一个简单的检查:

const d = vehicles.vehicles.filter((vehicle) => vehicle && vehicle.owner && vehicle.owner._id === quick.temp.customer._id);

如果vehicle.owner是任何非null且不是对象,则此操作可能会失败,但您可以进一步扩展它以检查类型vehicle.owner instanceof Object

使用ES6,您可以使用可选的链接:?

const d = vehicles.vehicles.filter((vehicle) => vehicle?.owner?._id === quick.temp.customer._id);

不过有点慢。

最后,您可以将条件封装到try{}catch(e){}中,而不必担心错误:

const d = vehicles.vehicles.filter((vehicle) =>
{
try
{
return vehicle.owner._id === quick.temp.customer._id
}
catch(er){}
});

这种方法是所有方法中最慢的https://jsbench.me/zzl1871t5u/1

最新更新