for循环仅在第一次迭代时执行

时间:2015-12-02 12:44:28

标签: javascript d3.js

我有以下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循环没有为每次迭代执行?

4 个答案:

答案 0 :(得分:3)

这是因为在这一行中,您将i本身的行为超过5

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

你应该拥有它,只读.attr('x', i + 10)

答案 1 :(得分:1)

因为你在这行中添加了+10 +。(&#39; x&#39;,i + = 10)。我想你需要像i + 10

这样的东西

答案 2 :(得分:1)

for循环的第二个字段是在每次循环运行之前检查的条件。在循环内部,你将向我添加10并同时分配它。在第一次运行之后,循环逻辑看到i为10并且退出,因为不再满足条件(i <5)。只需将i += 10更改为i + 10i * 10

答案 3 :(得分:0)

这是因为你在第一个循环中将增量计数器加10:

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

之后,在第一次迭代中,i为10,这大于你的限制。

很可能你错误​​地使用了相同的变量,但这里没有足够的信息。但是,如果您这样做,请更改循环内的ii循环条件中的for