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

Syntax 在CoffeeScript中初始化数组的最智能方法,syntax,coffeescript,Syntax,Coffeescript,在coffee脚本中,用特定值0初始化数组的最佳方法是什么。到目前为止我所做的- [0..100].map -> 0 及 如果个人认为第一个脚本的性能很差,而第二个太冗长,破坏了咖啡脚本编程的魅力 更新2: 如果性能不是问题,那么我想这也是一个选择 arr = new Array(10).join(0).split('') 更新2:如果联接通过,则上述选项的性能将优于其他选项number 更新3:在看到评论和答案中提到的几个问题后,我尝试使用node.js自行执行这些问题。以下是奇怪的

在coffee脚本中,用特定值
0
初始化数组的最佳方法是什么。到目前为止我所做的-

[0..100].map -> 0

如果个人认为第一个脚本的性能很差,而第二个太冗长,破坏了咖啡脚本编程的魅力

更新2: 如果性能不是问题,那么我想这也是一个选择

arr = new Array(10).join(0).split('')
更新2:如果联接通过,则上述选项的性能将优于其他选项
number

更新3:在看到评论和答案中提到的几个问题后,我尝试使用node.js自行执行这些问题。以下是奇怪的结果- 代码-


有趣的是,拆分并加入花费的时间要少得多。另外,如果我们真的关心性能,那么我们应该尝试初始化和排列真正大的数组,而不是几百个。

下面是问题/评论中提到的每个选项的性能比较

在Chrome 28上为我

arr = []
arr.push(0) while arr.length isnt 100
是最快的

是最慢的

也就是说,最慢的速度大约为10万次/秒。由于初始化应该是一个相对不常见的操作,我认为可以肯定地说,这里的性能不如可读性重要


我个人认为推送版本和映射版本最具可读性,但这实际上应该是由您和其他处理/阅读此代码的人做出的决定。

我的投票结果是
arr=(0代表[0…100]中的x)

它清晰、简洁、像咖啡脚本一样,并编译成相当清晰的Javascript:

var arr, x;

arr = (function() {
  var _i, _results;
  _results = [];
  for (x = _i = 0; _i < 100; x = ++_i) {
    _results.push(0);
  }
  return _results;
})();
var-arr,x;
arr=(函数(){
var_i,_结果;
_结果=[];
对于(x=_i=0;_i<100;x=+_i){
_结果:push(0);
}
返回结果;
})();

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

使用第一个,它非常漂亮和清晰。当它成为一个问题时,担心性能。还有
arr=(0代表[0…100]中的n])
是的。我希望在coffeescript中有一个内置的功能。我喜欢在coffeescript中使用数组交换数字的方式。发现
push
out在Chrome上执行
ari[x]=0
,但在Firefox上不执行。在jsperf.com上还有更多这样的测试,join/split版本创建了
['0','0',…]
。缩写为字符,而不是整数。我们可以去掉CoffeeScript中的变量
x
?epidemian给出了一个例子。这就是我想要的,但它的性能不如@nicolashruchten的答案好。这个答案比我的好,它编译的JS减去变量后基本上完全相同,所以演出应该很精彩close@Tushar,请注意,在jsPerf中,数组的大小不是在表达式中硬编码的(它使用
(0表示[0…size])
而不是
(0表示[0…100000])
),因此,Coffee编译器生成一个循环,该循环必须检查范围在每次迭代中是上升还是下降。尽管如此,Firefox似乎并没有因此受到任何性能损失:从性能和语法两方面来看,这似乎是最好的选择。谢谢:)
arr = []
arr.push(0) while arr.length isnt 100
[0..100].map -> 0
var arr, x;

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