如何循环通过一个数组,并继续在开始一旦它达到结束?



我的问题:

我有一个名为"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);

相关内容

最新更新