函数返回未定义且缺少结束返回语句



我想根据对象数组中的属性过滤对象。为此,我单独编写了过滤条件。

这是我调用过滤器条件

的地方
.filter((service) => {
filterOverlappedServices(service);
})

这是我的过滤条件

const filterOverlappedServices = (service: Item): boolean => {
if (bookings) {
bookings.forEach((booking) => {
return moment(service?.duration?.start).isBetween(
booking.data[0]?.duration?.start,
booking.data[0]?.duration?.end,
'minute',
);
});
} else {
return true;
}
};

我在这里所做的是检查给定的日期字符串(isostring)是否在其他2个开始和结束时间之间的时间。

然而,这总是返回undefined并且还显示一个typescript错误

Function lacks ending return statement and return type does not include 'undefined'.

但不是我的函数返回true或false基于我的实现?从哪里返回一个未定义?

你得到错误是因为你的"筛选函数"没有返回任何东西。试着改变

.filter((service) => {
filterOverlappedServices(service);
})

.filter((service) => {
return filterOverlappedServices(service);
})

或者

.filter(filterOverlappedServices)

同样,forEach中的返回值不会从filterOverlappedServices返回。实际上,这个回报并没有起到什么作用。forEach总是返回未定义的,所以,它的回调没有意义,有一个返回值。你要么在寻找map,要么完全是其他的东西。

因为您使用的是.forEach和回调函数,所以返回在外部函数中不做任何事情,只在回调中。

根据我的经验,.forEach很少给我想要的东西,所以我通常把它改成for (const booking of bookings)类型的循环。在这里,您可以返回到外部函数。

Btw:如果你在for循环中返回,只有第一个会返回,其他的会被跳过。

forEach是ES5的残余,由于它使用回调函数而有一些限制。返回值被忽略,并且没有直接的方法来中断循环。

另一个问题是filter忽略返回值。

为了检查一些数组元素是否符合条件,可以使用相应的方法:

.filter((service: Item) => {
return !bookings ? true : bookings.some((booking) => {
return moment...;
});
});

相关内容

  • 没有找到相关文章

最新更新