Javascript:在数组末尾重启一次循环

时间:2017-05-10 16:20:02

标签: javascript loops

我最近遇到了这个问题,无法在任何地方找到一个好的答案(因此问题)。

我希望在到达终点后重新启动循环,但只循环有限次数。

在这个特定的上下文中,我有一周中的一系列天数,我希望使用Date.getDay()显示从今天到一周中的下一个7天的天数,其中,返回从0(星期日)到6(星期六)的值。我可以创建一个接下来7天名称的数组,除了因为我当前的循环而一直跳过一个。这是我迄今为止所拥有的。

我的预期输出是:

['friday', 'saturday', 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday']

const dayNames = [
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday",
  "Sunday"
];
const rawDate = new Date();
let dayNum = rawDate.getDay();
const week = [];
for (let i = 0; i < 6; i++) {
  if (dayNum + 1 === 7) {
    dayNum = 0;
    for (j = 0; j < todayNum; j++) {
      week.push(dayNames[dayNum])
      dayNum++
    }
    week.push(dayNames[dayNum]);
    dayNum++
  } else {
    week.push(dayNames[dayNum + 1]);
    dayNum++;
  }

}
console.log(week);

我确实看到了我的&#34; if&#34;在我的&#34; for&#34;是一个跳过的原因,但我似乎无法解决如何解决问题。谢谢你们所有

5 个答案:

答案 0 :(得分:3)

您可以使用remainder operator %作为正确的索引。

const dayNames = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
const rawDate = new Date();
let dayNum = rawDate.getDay();
const week = [];
for (let i = 0; i < 6; i++) {
    week.push(dayNames[(dayNum + i) % dayNames.length]);
}
console.log(week);

答案 1 :(得分:1)

您不需要重新启动循环,只需使用模数运算符来包装数组索引。

您需要修正dayNames的顺序,以便它与getDay()返回的内容相对应。循环需要运行7次,而不是只需要6次才能完成整周。

&#13;
&#13;
const dayNames = [
  "Sunday",
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday"
];
const rawDate = new Date();
const dayNum = rawDate.getDay();
const week = [];
for (let i = dayNum; i < dayNum + 7; i++) {
  week.push(dayNames[i % 7]);
}
console.log(week);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

尝试使用%运算符,只需一个循环:

&#13;
&#13;
const dayNames = [
  "Sunday",
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday"
];

const rawDate = new Date();
let dayNum = rawDate.getDay();
const week = [];

for (let i = 0; i < 7; i++) {
    week.push(dayNames[dayNum++ % 7]);
}

console.log(week);
&#13;
&#13;
&#13;

另外,根据Date.prototype.getDate,星期一是零日。

答案 3 :(得分:0)

如果你想[明天,明天+ 1,......,明天+ 6]:

for (let i = 1; i <= 7; i++) {
  week.push(dayNames[(dayNum + i) % 7]);
}

答案 4 :(得分:0)

您需要i < 7才能获得整整7天,然后使用模数运算符%返回除法的余数,单个for循环将为您提供所需的结果。

 const dayNames = [
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday",
  "Sunday"
];
const rawDate = new Date();
let dayNum = rawDate.getDay();
const week = [];
for (let i = 0; i < 7; i++) {
    week.push(dayNames[(dayNum + i) % dayNames.length]);
}
console.log(week);