Optimization 优化我的咖啡脚本代码
我目前正在学习CoffeeScript,因为它比JavaScript更具表现力,因此,我想知道如何优化下面的代码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
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