Optimization 优化我的咖啡脚本代码

Optimization 优化我的咖啡脚本代码,optimization,coffeescript,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

我目前正在学习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,但是任何其他的技巧都将不胜感激

提前谢谢

编辑: 我太傻了,忘了数学是怎么工作的,谢谢泽塔。
另外,感谢epidemian的进一步优化

这些优化与CoffeeScript关系不大:

首先,嵌套的ifs可以转换为链接的AND,如:

但是询问一个数字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个除数不是常数,并且您的算法应该能够使用不同的除数,那么您可以将它们设置为下一天的数字

然后,totalDays-=7,而totalDays>7循环创建一个数组,然后仅使用其最终元素。该逻辑可替换为模运算符:

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

您可以将循环缩短为,尽管您也可以执行nextday=60;-:


这看起来像是一项工作,因为您的脚本已经开始工作了。另外,因为你所有的数字都是素数3,4,5,你可以简单地取乘积,用一个表达式来解决你的问题,而不是用循环。你能给我举个例子吗?nextDay=3*4*5。60是第一个可以被3,4,5整除的数字。这不是CoffeeScript的特性,这是简单的数学;。哦,我现在觉得自己很愚蠢:/
totalDays = lastDay + nextDay - 1
weekday = weekdays[totalDays % 7]
for x in [1..9001] when x % 60 is 0
  nextDay = x
  break