我的问题:
我有一个名为"weekdays":
的数组const weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
假设今天是星期六,我想知道离星期二还有多少天(显然是3天)。我如何循环遍历数组-从"并继续在开始,直到它到达"星期二"?
我的代码:
const weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
const start = weekdays.indexOf("Sat");
const end = weekdays.indexOf("Tue");
let howManyDays = 0;
for (let i = start; i < end; i = (i + 1) % weekdays.length) {
howManyDays = howManyDays + 1;
}
然而,似乎是"多少天";当我在浏览器的控制台中运行代码时,仍然为0。
const weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
const length = weekdays.length; // 7
const start = weekdays.indexOf("Sat"); // 5
const end = weekdays.indexOf("Tue"); // 1
let numOfDays = 0;
// If start comes after end, then we can take the difference between the start and the length,
// and add that to the end.
if (start > end) {
numOfDays = (length - start) + end;
// (7 - 5) + 1 // 3
}
// If start is before end, then just subtract one from the other.
if (start < end) {
numOfDays = end - start;
}
// If the start and end are the same, then it's 0, which is what our variable was initialised as.
return numOfDays; // 0
唯一要考虑的是,如果是下周,您是否希望同一天是0
,如在示例中,还是7
。
UPDATE
为了使这个工作正常,我们需要考虑数组包装-我没有在我最初的回答。
所以我将在这里留下一个类似于已经存在的解决方案。
const howManyDaysBetween = (start, end) => {
const weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
const week = weekdays.length;
const startDay = weekdays.indexOf(start);
const endDay = weekdays.indexOf(end);
const howManyDays = startDay > endDay ? (week - startDay) + endDay : endDay - startDay;
console.log(`How many days between ${start} and ${end}?: ${howManyDays}`);
}
howManyDaysBetween("Sat", "Tue")
howManyDaysBetween("Tue", "Sat")
howManyDaysBetween("Mon", "Sun")
howManyDaysBetween("Fri", "Wed")
这个循环似乎最适合这个问题。虽然有点傻,如果你跑2个indexOf,你已经得到了距离。只需要减去和模块数组的长度。但是这种方法对于循环来说是很好的,因为你可以边走边比较值,直到找到"Tue">
const weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
const start = weekdays.indexOf("Sat");
const end = weekdays.indexOf("Tue");
let howManyDays = 0;
for (let i = start; i != end; i++) {
i = i % weekdays.length;
howManyDays = howManyDays + 1;
}
console.log(howManyDays)
你需要在基数为7的记数系统中计数。下面的代码将为您简单地完成。
const weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
const start = weekdays.indexOf('Sat');
const end = weekdays.indexOf('Tue') + weekdays.length;
const howManyDays = end - start;
console.log(howManyDays);