2012-05-23 2 views
0

JS:Более элегантные CoffeeScript петля

for(i=this.current.arr.length;i<this.counterLength;i++){ 
    dosomthing(); 
    dosomethingelse(); 
} 

КОФЕ:

i = @current.arr.length 
while i < @counterLength 
    dosomthing() 
    dosomethingelse() 
    i++ 

Я знаю, CoffeeScript имеет большой синтаксис цикла конфету, но я не могу найти более изящный способ написания его, чем это. Есть ли еще способ coffeescripty сделать это?

Я знаю о:

for currentArr in current.arr 
//and 
for currentArr, 1 in current.arr 

, но я должен начать в @currentLength и не 0

+0

Вы пытаетесь выполнить итерацию через массив от конца до начала? A.K.A в обратном направлении? Что такое 'this.counterLength'? – Kyle

+0

Я пытаюсь выполнить итерацию '@ currentLenght- @ current.arr.length' раз. – Fresheyeball

+0

Почему downvote? Зачем комментировать? – Fresheyeball

ответ

2

Оператор [..] является то, что вы ищете:

start = this.current.arr.length 
end = this.counterLength 
for [start...end] 
    dosomthing() 
    dosomethingelse() 

Нет необходимости predefine start и end, я просто использовал его, чтобы сделать код более понятным. Обратите внимание, что если start больше, чем end, то оно будет идти назад.

На самом деле вам нужен оператор [...], потому что вы использовали < вместо <= в коде. Оператор [...] исключает последний элемент.

+0

Можете ли вы связать меня с документацией этого оператора? Я никогда не слышал об этом, но он смотрится прямо в сторону neato! – Fresheyeball

+0

@Fresheyeball Официальная документация CoffeeScript: http://coffeescript.org/#slices – freakish

+0

Последующий вопрос. Нужна ли мне 'i', поскольку она не используется, кроме построения цикла? – Fresheyeball

Смежные вопросы