Javascript 当数组中有更多值时,JS函数进入无限循环
我有一个正在工作的JSFIDLE: 当我的federalHolidays数组中只有几条记录时,它会工作得非常好。但问题是,当federalHolidays数组的大小增加时,它会进入一个无限循环 请检查小提琴。这是您的循环:Javascript 当数组中有更多值时,JS函数进入无限循环,javascript,Javascript,我有一个正在工作的JSFIDLE: 当我的federalHolidays数组中只有几条记录时,它会工作得非常好。但问题是,当federalHolidays数组的大小增加时,它会进入一个无限循环 请检查小提琴。这是您的循环: for (startDate.setDate(startDate.getDate() - 1); !startDate.getDay() || startDate.getDay() === 6 || federalHolidays.includes(st
for (startDate.setDate(startDate.getDate() - 1);
!startDate.getDay() || startDate.getDay() === 6 ||
federalHolidays.includes(startDate.toISOString().split('T')[0]) ||
federalHolidays.includes(yesterdayString);
startDate.setDate(startDate.getDate() - 1)
) {
}
问题是,
yesterdayString
在循环中从不更改,因此如果它恰好在federalHolidays
中,那么您将有一个无限循环。为什么在那里使用这样的for
语句?一个while
会更合适、更具可读性。添加一个联邦政府的例子,它会触发联邦政府进入无限循环一般来说,为什么for
的内部会有这么多混乱?如果有一个for
的主体为空,并且所有这些内容都处于终止状态,这是相当可疑的。federalHolidays.includes(yesterdayString)
如果返回一次true,就会一直返回true,因为“yesterdayString”基本上不会更改,我正在尝试获取任何给定日期的前一个工作日期。我明白了,工作日总是工作日,不是联邦法定日。那么你的意思是,如果是联邦假日,只需返回for循环的最后一个出口?@lalabhatt你不需要检查昨天是否是循环中的工作日。你可以在循环之前检查,如果正好是假日,那么我们知道前一个工作日必须在昨天之前,所以你需要从两天前开始循环。
for (startDate.setDate(startDate.getDate() - 1);
!startDate.getDay() || startDate.getDay() === 6 ||
federalHolidays.includes(startDate.toISOString().split('T')[0]) ||
federalHolidays.includes(yesterdayString);
startDate.setDate(startDate.getDate() - 1)
) {
}