2015-12-02 2 views
1

У меня есть следующий for цикла, который присоединяя rect к group элементу:для цикла, выполняющего только для первой итерации

var svg_container = d3.select(element[0]).append('svg') 
             .attr('width', width) 
             .attr('height', 50) 

var legend_group = svg_container.append('g'); 

for(var i = 0; i < 5; i++) { 
    legend_group.append('rect') 
           .attr('x', i += 10) 
           .attr('y', 5) 
           .attr('width', 10) 
           .attr('height', 5) 
           .attr('fill', 'red') 
} 

Но это работает только для i = 0 и нет никаких ошибок. Тем не менее, когда я удалить attr цепочки, она работает следующим образом:

for(var i = 0; i < 5; i++) { 
    legend_group.append('rect'); 
} 

Почему цикл for не выполняется для каждой итерации?

ответ

3

Это потому, что в этой строке вы chainging i себя более чем 5.

.attr('x', i += 10) 

Вы должны иметь его, как только для чтения .attr('x', i + 10).

+0

спасибо, какая глупая ошибка! –

1

Поскольку вы добавляете +10 к I в этой линии .attr («х», я + = 10) .Я думаю, что вам нужно что-то вроде я + 10

1

Второе поле цикла цикла - это условие, которое проверяется перед каждым запуском цикла. Внутри цикла вы добавляете 10 к i и назначаете его одновременно. после первого запуска логика цикла видит, что i равна 10 и выходит, потому что условие (i < 5) больше не встречается. Просто измените i += 10 на i + 10 или i * 10.

0

Это потому, что вы добавляете 10 к вашему приращения счетчика в первом цикле:

.attr('x', i += 10) 

После этого, в первой итерации, i 10, что больше, что ваш предел.

Возможно, вы используете такую ​​же переменную по ошибке, но здесь информации недостаточно. Но если вы это сделаете, измените i внутри вашей петли или i в условиях петли for

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