Equivalent Ruby .times in Coffeescript

2019-03-22 09:54发布

What is the most concise equivalent Coffeescript to the following:

# ruby    
3.times { puts 'hi' }

?

The best I could think of is:

# coffeescript
for n in [1..3]
  console.log 'hi'

5条回答
劫难
2楼-- · 2019-03-22 10:08

JavaScript arrays (at least the modern ones) have a forEach method and CoffeeScript [1..3] ranges are arrays so you could do this:

[1..3].forEach -> console.log 'hi'

One warning though: this might be a bit hard on the browser if your n in [1..n] is large as you'll be building a large array just to get a convenient notation; but if n is small then the overhead of building the array shouldn't matter that much.

查看更多
Animai°情兽
3楼-- · 2019-03-22 10:09
console.log 'hi' for [1..3]

To also handle 0 correctly:

console.log 'hi' for [1..n] if n

Or with prototype magic:

Number::times = (fn) ->
  do fn for [1..@valueOf()] if @valueOf()
  return
3.times -> console.log 'hi'

Note that the second method isn't recommended because changing the Number prototype has global effects.

Edit: Changed according to @BrianGenisio's comment (.prototype. -> ::)

Edit 2: fixed handling of 0, thanks @Brandon

查看更多
你好瞎i
4楼-- · 2019-03-22 10:13

Since you're already using Underscore.js along with CoffeeScript:

_(3).times -> console.log('hi')
查看更多
做个烂人
5楼-- · 2019-03-22 10:24
console.log 'hi' for[]in length:3
查看更多
Explosion°爆炸
6楼-- · 2019-03-22 10:29

using lodash:

_.times 3, -> console.log 'hi'
查看更多
登录 后发表回答