2016-03-07 140 views
1

我要缩短我下面的代码:JavaScript - 是否可以在不使用OR的情况下在一种情况下检查多个工作日?

if (d.getDay() == 1 && d.getHours() <= 21 || d.getDay() == 2 && d.getHours() <= 21 || d.getDay() == 3 && d.getHours() <= 21 || d.getDay() == 4 && d.getHours() <= 21 || d.getDay() == 5 && d.getHours() <= 21) { 
    //do something 
} 

到这样的事情?:

if (d.getDay() == 1-5 && d.getHours() <= 21) { 
    //do something 
} 

,甚至更短。这是可能的,什么是最好的方式?我在代码中多次使用该行,有时几乎没有变化。如果可能的话没有jQuery。

回答

2

您可以通过使用>=<=运营商简化if条件,

var day = d.getDay(); 
var hours = d.getHours(); 
if ((day >= 1 && day <=5) && hours <= 21) { 
    //do something 
} 
+0

这也将为例如之间的任意数字工作1和2,例如'1.5f' –

+2

@LukaJacobowitz'getDay()'不会返回'1.5' –

1

削去从Rajaprabhu Aravindasamy的回答几个按键:

var day = d.getDay(); 
var hours = d.getHours(); 
if (hours < [0,22,22,22,22,22,0][day]) { 
    //do something 
} 
+0

也就是说,除非有例如,星期五开放时间较短,这在我的变体中更容易实施。 –

+0

目标不应总是写最短的代码。虽然你的想法非常出色,但代码中的性能肯定会受到影响,特别是如果该函数正在频繁执行。 – Rafid