Noob問題。我正在嘗試爲範圍編寫一個for循環。例如,這是我想產生的JavaScript是什麼:for循環範圍CoffeeScript
var i, a, j, b, len = arr.length;
for (i = 0; i < len - 1; i++) {
a = arr[i];
for (j = i + 1; i < len; j++) {
b = arr[j];
doSomething(a, b);
}
}
我已經走了這麼遠就是下面最接近的,但
- 它生成不必要的和昂貴的切片呼籲
- 訪問內環內的陣列長度
的CoffeeScript:
for a, i in a[0...a.length-1]
for b, j in a[i+1...a.length]
doSomething a, b
生成的代碼:
var a, b, i, j, _i, _j, _len, _len1, _ref, _ref1;
_ref = a.slice(0, a.length - 1);
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
a = _ref[i];
_ref1 = a.slice(i + 1, a.length);
for (j = _j = 0, _len1 = _ref1.length; _j < _len1; j = ++_j) {
b = _ref1[j];
doSomething(a, b);
}
}
(如何)可以這樣在CoffeeScript的表達?
謝謝,這是有效的。我不明白爲什麼它仍然會產生一些不必要的循環計數器,但我可以忍受。 – alekop 2013-02-15 18:08:46
@alekop我認爲這些額外的計數器的主要理由是,如果你碰巧修改循環內的循環變量('i'或'j'),那麼你不會改變循環的迭代次數。 – epidemian 2013-02-15 19:24:48