如何在CoffeeScript的“for in”循环中使用缓存的Array的长度?

时间:2012-05-16 07:05:49

标签: for-loop coffeescript

The following CoffeeScript code:

for a in arr
  do_something_with arr.length

编译为:

var a, _i, _len;

for (_i = 0, _len = arr.length; _i < _len; _i++) {
  a = arr[_i];
  do_something_with(arr.length); // I want to use '_len' here
}

是否可以使用arr.length的缓存值而不是在每次迭代中计算它?

2 个答案:

答案 0 :(得分:3)

如果你有一个已定义的数组而不是一个远程数组,那么你实际上可以在块中使用_len:

for a in arr
  _len == arr.length

但是,这依赖于CS内部,这可能会在新版本中发生变化。 它也不适用于每个阵列。

arr = [0..10]
for a in arr
  #this works
  console.log _len

但:

for a in [0..10]
  #this doesn't work
  console.log _len

我认为如果你想使用数组长度的缓存版本,最好在你的代码中明确地这样做,而不是依赖于CS的内部变量名。

而是:

arrLength = arr.length
for a in arr
   doSomethingWith arrLength

答案 1 :(得分:2)

考虑?

for i in [0...len = arr.length]
  a = arr[i]
  do_something_with len