Dan*_*Dan 7 javascript coffeescript
我的代码中有几个地方需要迭代字符串并通过char执行char操作.我的node.js应用程序需要每次请求执行此操作数十次,并且通常字符串的长度可能相当长.
我看到将下面的一个javascript转换为coffeescript的唯一方法是根据字符串的长度创建一个数组.我有这个问题是在硬件方面做的额外事情,占用额外的内存,而且似乎没必要(我的节点应用程序处理dgrams - 高达每秒数千 - 所以所有这些额外的工作加起来).
JavaScript方式:
for(var i = 0; i < str.length; i++) { /* Do stuff with str here */ }
Run Code Online (Sandbox Code Playgroud)
建议的CoffeeScript方式
for i in [0..str.length]
# Do stuff here
Run Code Online (Sandbox Code Playgroud)
再一次,我认为当传统的for循环不必从硬件角度搞乱那一步时,强制创建一个数组对象是愚蠢的.
我发现的唯一工作是使用while循环,如:
i = 0
while i < str.length
# Do stuff
i++
Run Code Online (Sandbox Code Playgroud)
虽然这有用,但是比使用简单的for循环的直接JavaScript方式更加冗长.
有没有办法在CoffeeScript中使用for循环而不必为了执行基本迭代而生成多余的数组?
vcs*_*nes 13
它实际上并不创建一个数组,如果它没有.看看编译好的JS.这个CoffeeScript:
str = "hello"
for i in [0..(str.length-1)]
alert(i)
Run Code Online (Sandbox Code Playgroud)
生成以下JavaScript:
var i, str, _i, _ref;
str = "hello";
for (i = _i = 0, _ref = str.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
alert(i);
}
Run Code Online (Sandbox Code Playgroud)
实际上没有创建数组.
(减去1到.length以避免未定义)