循环咖啡脚本?

问题描述:

我正在将一段代码从JavaScript转换为coffeescript。循环咖啡脚本?

for (var i = 0, len = keys.length; i < len; i++) { 
    k = keys[i]; 
    if (!mailOptions.hasOwnProperty(k)) 
     mailOptions[k] = app.set('mailOptions')[k] 
    } 

我不知道如何接近它,并在doc网站上不清楚,有人可以给我一个清晰的解释吗?非常感谢你!

+0

要小心,以这种方式使用'hasOwnProperty';如果碰巧有一个名为“hasOwnProperty”的邮件选项,它会失败。为了正确处理这种情况,在CoffeeScript中使用'Object.prototype.hasOwnProperty.call(mailOptions,k)'(或'Object :: hasOwnProperty.call mailOptions,k')。 – davidchambers 2013-02-10 07:33:28

for key in keys 
    if not mailOptions.hasOwnProperty key 
    mailOptions[key] = (app.set 'mailOptions')[key] 

或保护式:

for key in keys when not mailOptions.hasOwnProperty key 
    mailOptions[key] = (app.set 'mailOptions')[key] 

编译为:

var key, _i, _len; 

for (_i = 0, _len = keys.length; _i < _len; _i++) { 
    key = keys[_i]; 
    if (!mailOptions.hasOwnProperty(key)) { 
    mailOptions[key] = (app.set('mailOptions'))[key]; 
    } 
} 
+1

护卫风格在这里更可取(imo)。对于它的价值,'(app.set'mailOptions')[key]'通常会写成app.set('mailOptions')[key]',尽管当然lispy风格是完全有效的。 – davidchambers 2013-02-10 07:36:50

这里有一种方法(从这里开始:http://js2coffee.org/):

i = 0 
len = keys.length 

while i < len 
    k = keys[i] 
    mailOptions[k] = app.set("mailOptions")[k] unless mailOptions.hasOwnProperty(k) 
    i++ 

但我不会做这种方式。我只想做:

for k in keys 
    mailOptions[k] = app.set("mailOptions")[k] unless mailOptions.hasOwnProperty k 

此输出(不含var,它也输出)以下:

for (_i = 0, _len = keys.length; _i < _len; _i++) { 
    k = keys[_i]; 
    if (!mailOptions.hasOwnProperty(k)) { 
    mailOptions[k] = app.set("mailOptions")[k]; 
    } 
} 

或者,如果你想成为票友,我不要在此提醒情况,因为它牺牲了一些可读性:

(mailOptions[k] = app.set("mailOptions")[k] unless mailOptions.hasOwnProperty k) for k in keys