循环咖啡脚本?

时间:2012-01-13 10:48:50

标签: coffeescript

我正在将一段代码从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网站上不清楚,有人可以给我一个明确的解释吗?非常感谢你!

2 个答案:

答案 0 :(得分:4)

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 :(得分:1)

这是一种方式(从这里开始: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