1

我正在为一周中的每一天生成 div:

var days = new Array("SUN","MON","TUE","WED","THU","FRI","SAT"); 

function generateWeekdays() {
  var d = new Date();
  var weekday = d.getDay();
  var todaysWeekday = days[weekday];

  for (var i = weekday; i < days.length; i++) {
      $('<div>' + days[i] + '</div>').appendTo('#weekdayList');

  }
}


 generateWeekdays();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="weekdayList"></div>

这会生成(例如)今天星期三和星期六(最后一个索引),但是我怎样才能让它生成一周,所以它会一直生成到下周的星期三并在那之后停止?

4

7 回答 7

4

您可以使用模块运算符%将索引保持在界限内。这将使超出数组长度的任何内容循环回来,因此您可以从 0 到数组长度添加今天的日期:

var days = new Array("SUN","MON","TUE","WED","THU","FRI","SAT"); 

function generateWeekdays() {
  var d = new Date();
  var weekday = d.getDay();

  for (var i = 0; i < days.length; i++) {
     console.log(days[(i + weekday) % days.length])

  }
}
generateWeekdays()

问题并不完全清楚,但如果你想包括周三,你可以循环使用for (var i = 0; i < days.length + 1; i++)

于 2018-08-15T19:38:47.210 回答
1

您可以迭代 7 次(根据需要一周),而不是在 days.length 处停止,然后执行模 (% 7) 操作以从 days 数组中获取元素。

var days = new Array("SUN","MON","TUE","WED","THU","FRI","SAT"); 

function generateWeekdays() {
  var d = new Date();
  var weekday = d.getDay();
  var todaysWeekday = days[weekday];

  for (var d = weekday, i = 0; i < 7; d++, i++) {
      $('<div>' + days[d % 7] + '</div>').appendTo('#weekdayList');

  }
}

generateWeekdays();
于 2018-08-15T19:43:55.827 回答
1

如何削减日子(从正常工作日开始)并在结束时附加(那些日子)为你的一周(从今天开始,你必须从那里削减)

function getWeekDaysFromToday() {
  let days = ["SUN","MON","TUE","WED","THU","FRI","SAT"];
  return days.concat( days.splice (0,new Date().getDay()));
}
console.log(getWeekDaysFromToday())

于 2018-08-15T19:50:39.497 回答
0

我对这个问题采取了不同的方法。如果我已经处理了 7 天,而不是增量检查,我将天列表连接到自身,所以它将是 14 天,然后从当天开始,我拼接出 7 天,所以我有一周,并且对于他们中的每一个我创建了一个 div。

我还对其进行了更改以收集 div 并将它们全部附加到最后以获得一些性能提升。

var days = new Array("SUN","MON","TUE","WED","THU","FRI","SAT"); 

function generateWeekdays() {
  var oneWeekOfDays = days.concat(days).splice(new Date().getDay(), 7).map(function(day){
    return '<div>'+ day +'</div>';
  });
  
  $('#weekdayList').append(oneWeekOfDays);
}

generateWeekdays();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="weekdayList"></div>

于 2018-08-15T19:54:56.400 回答
0

添加另一个迭代如何考虑今天与数组索引相关的内容?

var days = new Array("SUN","MON","TUE","WED","THU","FRI","SAT"); 

function generateWeekdays() {
  var d = new Date();
  var weekday = d.getDay();
  var todaysWeekday = days[weekday];

  for (var i = weekday; i < days.length; i++) {
      $('<div>' + days[i] + '</div>').appendTo('#weekdayList');

  }
  
  for(var i = 0; i < days.indexOf(days[weekday]); i++){
     $('<div>' + days[i] + '</div>').appendTo('#weekdayList');
  }
}


 generateWeekdays();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="weekdayList"></div>

于 2018-08-15T19:43:20.013 回答
0

这是我放在一起的一个快速实现。我使用了一个 do/while 循环,因为你知道你总是会至少执行一次。我还将循环限制为您要显示的天数,以便您可以增加它以显示额外的天数。我还使用带有计数和工作日的 %(模数)从数组中获取正确的值。

var days = new Array("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT");

function generateWeekdays() {
  var d = new Date();
  var weekday = d.getDay();
  var todaysWeekday = days[weekday];

  let count = 0;
  do {
    $('<div>' + days[(count + weekday) % days.length] + '</div>').appendTo('#weekdayList');

    count++;
  } while (count < 7)

}

generateWeekdays()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="weekdayList">

</div>

于 2018-08-15T19:43:32.613 回答
0

在您的for循环中,而不是迭代,直到days.length您只想进行 7 次迭代并循环回到数组的开头。如果您设置一个将迭代 7 次的计数器,并在循环中添加一个 if 语句以在到达末尾时循环回数组的开头,那应该可以工作。

于 2018-08-15T19:38:15.033 回答