Javascript 迭代一周中的几天
我有一段代码,它迭代一组选定的日期,如果今天是选定日期的一部分,它应该是Javascript 迭代一周中的几天,javascript,Javascript,我有一段代码,它迭代一组选定的日期,如果今天是选定日期的一部分,它应该是true。然而,isDayringsfalse无论是daysChosen还是今天发生的事件。那么我在这里错过了什么 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'])
true
。然而,isDay
ringsfalse
无论是daysChosen
还是今天发生的事件。那么我在这里错过了什么
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
更新:
好的,这是一些公牛****!!!。。。考虑到今天在数组中,这究竟是如何计算为真的呢
for (var value of ['Sun','Mon','Tue','Wed','Thu','Fri'])
{
var _day = (today!=value) ? true : false
break;
}
console.log(_day)
当isDay
变为true
时,您的循环将继续循环,并且在下一次迭代中可以将false
分配给它。您可以使用break
语句退出循环:
var isDay = false;
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu'])
{
if (today == daysChosen) {
isDay = true;
break;
}
}
您还可以使用函数检查数组是否包含当前的
。(!!
是双重否定):
不幸的是,find
并非适用于所有浏览器。当isDay
变为true
时,您的循环将继续循环,并且在下一次迭代中可能会将false
分配给它。您可以使用break
语句退出循环:
var isDay = false;
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu'])
{
if (today == daysChosen) {
isDay = true;
break;
}
}
您还可以使用函数检查数组是否包含当前的
。(!!
是双重否定):
不幸的是,find
并非适用于所有浏览器。如果您有一个东西数组,并且希望检查它是否有东西,我会在数组上使用新属性:
["Sun", "Mon", "Tue", "Wed", "Thu"].includes(today);
另外,不要从字符串输出中提取星期几,而是使用
如果您不想包含polyfill,可以使用以下技巧:
~
是一个二进制NOT运算符,它将数据类型中的位转换为相反的位。当没有搜索项的实例时,从.indexOf()
返回的非-1二进制值为0。在JavaScript中有一个称为强制的概念,这意味着当出现典型的不和谐时,比如添加布尔值,就会有一种类型的值转换为另一种类型。例如,所有非零的数字都强制为true
,而0
强制为false
。因此,如果将上述文本放入if
语句中,它将充当.includes()
更好的方法
您正在从Date.toString()
提取一周中的某一天,这不是一个好的做法。考虑使用数组访问和<代码> Dea.Trime.GETEAL()/<代码>,使过程更加合理:
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
}
这有一些好处
终极可定制性。您可以指定要匹配的确切日期
不依赖字符串。从字符串中提取数据的方法将在非英语用户代理中出错,因为它们的日期字符串将不同
如果您有一个数组,并且希望检查它是否有内容,我将在数组上使用新属性:
["Sun", "Mon", "Tue", "Wed", "Thu"].includes(today);
另外,不要从字符串输出中提取星期几,而是使用
如果您不想包含polyfill,可以使用以下技巧:
~
是一个二进制NOT运算符,它将数据类型中的位转换为相反的位。当没有搜索项的实例时,从.indexOf()
返回的非-1二进制值为0。在JavaScript中有一个称为强制的概念,这意味着当出现典型的不和谐时,比如添加布尔值,就会有一种类型的值转换为另一种类型。例如,所有非零的数字都强制为true
,而0
强制为false
。因此,如果将上述文本放入if
语句中,它将充当.includes()
更好的方法
您正在从Date.toString()
提取一周中的某一天,这不是一个好的做法。考虑使用数组访问和<代码> Dea.Trime.GETEAL()/<代码>,使过程更加合理:
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
}
这有一些好处
终极可定制性。您可以指定要匹配的确切日期
不依赖字符串。从字符串中提取数据的方法将在非英语用户代理中出错,因为它们的日期字符串将不同
您有一些主要问题导致代码出现问题
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.
}
您有一些主要问题导致代码出现问题
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=today==daysChosen之后的循环?真:假
如果它是真的,否则它只对'Thu'lol'ring真
“rings假
”创造性!我喜欢。你需要break代码>你在isDay=today==daysChosen之后的循环?真:假
如果它是真的,否则它只对'Thu'lol'ring真
“rings假
”创造性!