Javascript 当数组中有更多值时,JS函数进入无限循环

Javascript 当数组中有更多值时,JS函数进入无限循环,javascript,Javascript,我有一个正在工作的JSFIDLE: 当我的federalHolidays数组中只有几条记录时,它会工作得非常好。但问题是,当federalHolidays数组的大小增加时,它会进入一个无限循环 请检查小提琴。这是您的循环: for (startDate.setDate(startDate.getDate() - 1); !startDate.getDay() || startDate.getDay() === 6 || federalHolidays.includes(st

我有一个正在工作的JSFIDLE:

当我的federalHolidays数组中只有几条记录时,它会工作得非常好。但问题是,当federalHolidays数组的大小增加时,它会进入一个无限循环

请检查小提琴。

这是您的循环:

  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)
  ) { 
  }