Câu hỏi Noob. Tôi đang cố gắng viết một vòng lặp for với một phạm vi. Ví dụ, đây là những gì tôi muốn sản xuất trong JavaScript:cho vòng lặp có phạm vi trong 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);
}
}
Gần nhất tôi đã đi cho đến nay là những điều sau đây, nhưng
- Nó tạo ra không cần thiết và lát đắt gọi
- truy cập chiều dài mảng bên trong vòng lặp bên trong
CoffeeScript:
for a, i in a[0...a.length-1]
for b, j in a[i+1...a.length]
doSomething a, b
Tạo mã:
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);
}
}
(thế nào) có thể này được thể hiện trong CoffeeScript?
Cảm ơn, điều đó có hiệu quả. Tôi không hiểu tại sao nó vẫn tạo ra một vài vòng lặp không cần thiết, nhưng tôi có thể sống với điều đó. – alekop
@alekop Tôi cho rằng lý do chính cho các bộ đếm bổ sung đó là nếu bạn thay đổi biến vòng lặp ('i' hoặc' j') bên trong vòng lặp, bạn không thay đổi các vòng lặp của vòng lặp. – epidemian