2012-04-20 3 views
8

У меня есть этот код: простой цикл в CoffeeScript

count = $content.find('.post').length;    
for x in [1...count] 
    /* 
    prev_el_height += $("#content .post:nth-child(" + x + ")").height(); 
    */ 
    prev_el_height += $content.find(".post:nth-child(" + x + ")").height(); 

Я ожидал, что это превратится в

for (x = 1; x < count; x++) { prev_el ... } 

, но он превращается в это:

for (x = 1; 1 <= count ? x < count : x > count; 1 <= count ? x++ : x--) { 

Может кто-нибудь пожалуйста объяснить, почему?

EDIT: Как получить ожидаемый синтаксис для вывода?

ответ

22

В CoffeeScript вам необходимо указать ключевое слово by, чтобы указать шаг цикла. В вашем случае:

for x in [1...count] by 1 
    ... 
3

Вы просите, чтобы петля из 1 в count, но вы при условии, что count всегда будет больше, чем или равно к одному; сгенерированный код не делает этого предположения.

Так что если count является> = 1, то счетчик цикла увеличивается каждый раз, когда:

Но если count является < 1, то счетчик цикла уменьшается каждый раз:

for (x = 1; x > count; x--) { /* ... */ } 
+0

благодарит за сообщение о проблеме ... – OZZIE

2

Ну , вы хотите x перейти от 1 до count. Код проверки, является ли count больше или меньше 1.

count Если больше чем 1, то он должен приращениюx в то время как это меньше, чемcount.

count Если меньше 1, то он к уменьшаетx пока он больше чем count.

+0

спасибо за сообщение о проблеме ... – OZZIE

+1

Ваш вопрос первоначально был ** ПОЧЕМУ? ** – Shahbaz

+0

Да, я понимаю, что, но я, хотя люди также предоставили бы решение, но спасибо:) Я дал вам +1 сейчас :) – OZZIE

0

Для дальнейшего использования:

$('#content .post').each -> 
    prev_el_height += $(this).height() 

Имеет тот же эффект, предполагая, что :nth-child эквивалентно .eq() и x проходя мимо числа элементов опечатка.

+0

Это не то, что я делаю, я добавляю каждую высоту div.post к переменной prev_el_height, которая уникальна для каждого div.post ... Я знаю, что это не оптимально для поиска для каждого div каждый отдельный круг, и я сейчас ищу решение. – OZZIE

+0

Теперь я сделал переменную $ content и сделал: 'prev_el_height + = $ content.find (". post: nth-child ("+ x + ")").height(); ' вместо этого! – OZZIE

+0

@OZZIE ах, что var не отображается в коде, который вы опубликовали. Это приятное улучшение, вы также можете сохранить коллекцию '.post', а затем отфильтровать ее. –

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