在CoffeeScript中初始化数组的最智能方法

tus*_*ath 4 syntax coffeescript

0在咖啡脚本中初始化具有特定值的数组的最佳方法是什么.到目前为止我做了什么 -

[0..100].map -> 0
Run Code Online (Sandbox Code Playgroud)

arr = []
arr.push(0) while arr.length isnt 100
Run Code Online (Sandbox Code Playgroud)

如果个人认为第一个表现不佳而第二个表现得过于冗长并破坏了咖啡脚本编程的魅力.

更新2: Incase性能不是问题,那么这也是我认为的一个选项.

arr = new Array(10).join(0).split('')
Run Code Online (Sandbox Code Playgroud)

更新2:如果传递了连接,则上述选项将比其他选项更好number

更新3:在看到评论和答案中提到的几个JSPerf测试之后,我尝试使用node.js来执行它们.以下是奇怪的结果 - 代码 -

    size = 10000000;
key = 1

console.time('splits')
arr1= Array(size + 1).join(key).split('')
console.timeEnd('splits')


console.time('maps')
arr2 = [1..size].map -> key
console.timeEnd('maps')

console.time('loop')
arr3 = []
arr3.push(key) while arr3.length isnt size
console.timeEnd('loop')


console.time('for')
arr4 = (0 for n in [0...size])
console.timeEnd('for')

console.time('for-no-var')
arr5 = (0 for [0...size])
console.timeEnd('for-no-var')


### node- 0.10.15
splits: 162ms
maps: 1639ms
loop: 607ms
for: 659ms
###
Run Code Online (Sandbox Code Playgroud)

有趣的是,分裂和加入花费的时间要少得多.此外,如果我们真的关心性能,那么我们应该尝试初始化和数组,这是非常大而不是大约数百的东西.

epi*_*ian 16

arr = (0 for [1..100])如果您不希望任何迭代变量泄漏到理解之外,那么还有表单;)


nic*_*ten 5

我的投票结果是 arr = (0 for x in [0...100])

它清晰,简洁,CoffeeScript-ish,并编译以合理地清除Javascript:

var arr, x;

arr = (function() {
  var _i, _results;
  _results = [];
  for (x = _i = 0; _i < 100; x = ++_i) {
    _results.push(0);
  }
  return _results;
})();
Run Code Online (Sandbox Code Playgroud)

  • @epidemian的答案显然比我的好:) (2认同)