JavaScript布尔函数允许多次返回



我在使用JavaScript函数时遇到了一些奇怪的行为,我认为这可能是我对如何使用JavaScript的语法问题/误解;返回";作用有问题的代码如下所示:

const preventOverlapInSchedule = (start, end) => {
duties.forEach(function (duty) {
if (
(start >= duty.start && start <= duty.end) ||
(end >= duty.start && end <= duty.end) ||
(start <= duty.start && end >= duty.end)
) {
console.log("false");
return false;
}
});
console.log("true");
return true;
};

然后使用此功能来防止调度冲突。但是,上面的两个控制台日志语句都在打印中。来自Java,传统上,我认为if条件求值为true的第二秒,函数应该返回false,这表明存在调度冲突,即新事件的开始时间或结束时间与已经记录的另一个事件部分或完全重叠,然后函数应该立即退出。

然而,我注意到的行为是,无论事件的日程安排如何,上面的两个控制台日志都会打印到屏幕上,这表明在if语句中返回false不会导致JavaScript函数立即退出。有人能告诉我为什么会发生这种事吗?

Array.some会更简单(根据您的需要更正布尔逻辑(:

const preventOverlapInSchedule = (start, end) => {
return duties.some(duty => 
(start >= duty.start && start <= duty.end) ||
(end >= duty.start && end <= duty.end) ||
(start <= duty.start && end >= duty.end));
}

在JS中,arr.forEach(callback())不返回任何内容。它只为数组中具有值的每个项执行代码。

for Each((

然而,arr.map(callback())对每个项调用一次函数,并返回一个新数组,其中包含回调执行的任何突变/更改。

map((

我们还有arr.filter(callback()),它将返回一个新的数组,其中每个项在回调中被求值为true。

过滤器((

还有一个arr.reduce(callback())稍微复杂一点,它有一个累加器和数组中的下一个值。我建议您在代码中查找该方法允许您执行的所有操作。

减少((

你试过这个吗?

const preventOverlapInSchedule = (start, end) => {
duties.forEach(function (duty) {
if (
(start >= duty.start && start <= duty.end) ||
(end >= duty.start && end <= duty.end) ||
(start <= duty.start && end >= duty.end)
) {
console.log("false");
return false;
}
console.log("true");
return true;
});
};

你在做前臂。因此,您的代码中存在一个逻辑问题。我认为它在Java中应该有类似的行为。

最新更新