优化我的CoffeeScript代码

时间:2013-04-09 18:17:03

标签: optimization coffeescript

我目前正在学习CoffeeScript,因为它比JavaScript更具“表现力”,因此,我想知道如何优化我在下面的代码

lastDay = 6
weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
weeksToDivide = 0

for x in [1..9001] 
    if x % 5 == 0
        if x % 4 == 0
            if x % 3 == 0
                nextDay = x
                break               

totalDays = lastDay + nextDay
day = (totalDays -= 7 while totalDays > 7)
weekday = weekdays[day[day.length - 1] - 1]

alert "Days until next meeting: #{nextDay}"
alert "That day is on a #{weekday}"

我主要是寻找一种优化if nest的方法,但是其他任何提示都会受到赞赏。

提前致谢。

修改
Zeta,我是愚蠢的,忘记了数学是如何工作的。 此外,感谢流行病进一步优化。

2 个答案:

答案 0 :(得分:0)

这些优化与CoffeeScript几乎没有关系:

首先,嵌套的if可以转换为链式and,例如:

for x in [1..9001] 
  if x % 5 is 0 and x % 4 is 0 and x % 3 is 0 
    nextDay = x
    break

但是询问数字“x”是否可被5 整除,可被4 整除,而可被3整除,这与询问它是否可被最小公约整除一样这三个数字中的多个,即60.所以循环相当于:

for x in [1..9001] 
  if x % 60 is 0 
    nextDay = x
    break

但是,该循环总是这样做:将nextDay分配给60.因此可以将其优化为单个赋值:

nextDay = 60

如果5,4和3除数不是常数,并且你的算法应该能够使用不同的除数,那么你可以将nextDay设置为这些数的least common multiple

然后,(totalDays -= 7 while totalDays > 7)循环创建一个数组,然后只使用其最终元素。逻辑可以用模运算符替换:

totalDays = lastDay + nextDay - 1
weekday = weekdays[totalDays % 7]

答案 1 :(得分:0)

你可以缩短循环(尽管你也可以做nextday = 60; - ):

for x in [1..9001] when x % 60 is 0
  nextDay = x
  break