1

我有一个函数可以将数字显示为格式正确的价格(以美元为单位)。

var showPrice = (function() {
  var commaRe = /([^,$])(\d{3})\b/;
  return function(price) {
    var formatted = (price < 0 ? "-" : "") + "$" + Math.abs(Number(price)).toFixed(2);
    while (commaRe.test(formatted)) {
      formatted = formatted.replace(commaRe, "$1,$2");
    }
    return formatted;
  }
})();

据我所知,重复使用的正则表达式应该存储在一个变量中,以便它们只编译一次。假设这仍然是正确的,那么这段代码应该如何在 Coffeescript 中重写?

4

2 回答 2

4

这是 CoffeeScript 中的等价物

showPrice = do ->
  commaRe = /([^,$])(\d{3})\b/
  (price) ->
    formatted = (if price < 0 then "-" else "") + "$" + Math.abs(Number price).toFixed(2)
    while commaRe.test(formatted)
      formatted = formatted.replace commaRe, "$1,$2"
    formatted
于 2013-01-07T20:29:27.760 回答
4

您可以使用js2coffee将您的 JavaScript 代码翻译成 CoffeeScript 。对于给定的代码,结果是:

showPrice = (->
  commaRe = /([^,$])(\d{3})\b/
  (price) ->
    formatted = ((if price < 0 then "-" else "")) + "$" + Math.abs(Number(price)).toFixed(2)
    formatted = formatted.replace(commaRe, "$1,$2")  while commaRe.test(formatted)
    formatted
)()

我自己的版本是:

showPrice = do ->
  commaRe = /([^,$])(\d{3})\b/
  (price) ->
    formatted = (if price < 0 then '-' else '') + '$' +
                Math.abs(Number price).toFixed(2)
    while commaRe.test formatted
      formatted = formatted.replace commaRe, '$1,$2'
    formatted

至于重复使用的正则表达式,我不知道。

于 2013-01-07T20:31:38.127 回答