迭代一周中的每一天
Iterating the days of the week
我有这段代码,它迭代选定的一组日期,如果今天是选定的一组的一部分,则应该调用true
。然而,无论daysChosen
或today
是什么,isDay
都会环住false
。那么我在这里遗漏了什么呢?
var date = new Date;
var isDay;
var today=date.toString().substring(0,4)
//console.log(today)//good
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu'])
{
console.log(daysChosen)//good
isDay = today==daysChosen ? true : false
}
console.log(isDay)//bad, should be true if today is part of daysChosen
更新:好吧,这是一些牛****!!
如果today
在数组中,这怎么可能为真呢?for (var value of ['Sun','Mon','Tue','Wed','Thu','Fri'])
{
var _day = (today!=value) ? true : false
break;
}
console.log(_day)
您的代码中有几个主要问题。
-
var today=date.toString().substring(0,4)
-天是3个字符长,所以你得到额外的空间在最后。today === "Sun "
,注意多余的空间 -
你没有跳出你的循环,一旦你找到正确的值,正如其他答案所指出的。
您可以简单地使用indexOf
方法。它返回给定字符串的索引,如果该字符串不包含在数组中,则返回-1。
var date = new Date();
// first 3 characters from string for day of week
var today = date.toString().substring(0,3);
var days = ['Sun','Mon','Tue','Wed','Thu'];
var isInDays = days.indexOf(today) > 0; // indexOf returns -1 if not contained
或修复您现有的代码:
var date = new Date;
var isDay;
var today=date.toString().substring(0,3)
//console.log(today)//good
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu'])
{
console.log(daysChosen)//good
isDay = today==daysChosen ? true : false
if(isDay) break; // must break once you find it or you will keep overriding the value.
}
当isDay
变成true
时,循环继续循环,在下一个迭代中可以将false
赋值给它。您可以使用break
语句退出循环:
var isDay = false;
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu'])
{
if (today == daysChosen) {
isDay = true;
break;
}
}
您也可以使用array .prototype.find()函数来检查数组中是否包含today
。(!!
是双重否定):
var isDay = !!['Sun','Mon','Tue','Wed','Thu'].find(function(day) {
return day === today;
})
遗憾的是find
不兼容所有浏览器
如果你有一个数组的东西,并想检查它是否有东西,我会使用新的.includes()
属性数组:
["Sun", "Mon", "Tue", "Wed", "Thu"].includes(today);
另外,不要从字符串输出中提取星期几,而是使用Date.prototype.getDay()
。
如果你不想包含polyfill,你可以使用我从Codegolf学到的这个技巧。SE:
~["Sun", "Mon", "Tue", "Wed", "Thu"].indexOf(today);
~
是一个二进制NOT操作符,它将数据类型中的位转换成相反的位。当没有搜索项的实例时,从.indexOf()
返回-1的二进制NOT为0。在JavaScript中有一个叫做强制的概念,意思是当类型不协调时,比如添加布尔值,一种类型的值会转换成另一种类型。例如,所有非零的数字都强制转换为true
, 0
强制转换为false
。因此,如果您将上述文本放入if
语句中,它将像.includes()
语句一样运行。
一个更好的方法
您正在从Date.toString()
中提取星期几,这不是一个好的实践。考虑使用数组访问和Date.prototype.getDay()
使这个过程更加合乎逻辑:
let today = new Date().getDay();
// Sun., Mon., Tue., etc.
if ([true, true, true, true, true, false, false][today]) {
// Day is matched
} else {
// Day is not matched
}
这有一些优点
- 最终的可定制性。您可以精确指定要匹配的日期
- 不依赖字符串。您从字符串中提取的方法将在非英语用户代理中出错,因为他们的日期字符串将不同。
- 如何在javascript中获取一年中的周数,其中周日是一周中的第一天
- 制作Easing Slider Start横幅取决于一周中的哪一天
- 完整日历 - 如何在周视图中添加一天中的时间
- 每15天为新用户加载一次放大弹出菜单
- 每3天倒计时一次
- 使用crossfilter和dc.js绘制每一天的最小-最大值
- 显示一年中每一天对象详细信息的日历
- 为给定月份/年的每一天创建文本输入行
- D3 日期范围(按小时);每 7 天重复一次
- JavaScript幻灯片(从其他幻灯片开始,具体取决于一周中的哪一天)
- 如何从JavaScript中的日期编号中获取一周中的哪一天
- 使用JavaScript根据一周中的哪一天更改消息
- 请任何人解释一下javascript代码,并建议我如何为一年中的每一天做if
- 使用moment js创建一个包含一周中的几天和一天中的几个小时的数组
- 使用Datejs-获取一周中的哪一天
- 获取一周中某一天的下一个日期
- 一年中的每一天的文本引用
- 一个javascript,可以显示不同的图像,每一分钟的一天
- 迭代一周中的每一天
- j选择一周中的每一天的时间