我一直在努力解决这个问题,但是我真的无法弄清楚-也无法在网上找到与此相关的任何内容。虽然我是D3的新手,但我曾经是一名开发人员;)

我只是尝试使用IF语句访问d.length。

小提琴在这里:http://jsfiddle.net/StephMatte/yA6ma/

在第24行,我想使用(d.length
但是,在第27行中,我确实在onclick警报语句中使用了d.length,并且确实给出了正确的结果!这是完整的代码:

var data = []; var base = 9; var div = "#chart";

    for (var i = 1; i <= 11*base; i++) {data[i] = [23, 45, 67, 89];}

    var Angle = d3.scale.linear().domain([0, 100]).range([0, 2 * Math.PI]);

    var arc = d3.svg.arc()
        .innerRadius( function(d, i) {return 20*(Math.ceil(i/base));} )
        .outerRadius( function(d, i) {return 20+(20*(Math.ceil(i/base)));} )
        .startAngle( function(d, i) {return Angle((((i-1)%base)/base)*100); } )
        .endAngle( function(d, i) { if (Angle(((i%base)/base)*100) == 0) { return Angle(100); } else { return Angle(((i%base)/base)*100); }  } );

    var paths = d3.select(div)
        .append("svg")
        .selectAll("path")
        .data(data)
        .enter()
        .append("path")
        .attr("id", function(d, i) {return "path"+i})
        .attr("d", arc)
        .style("fill", function(d, i) { if (1 > 2 || i <= base) { return "blue"; } else { return "red"; } })
        .style("stroke", function(d, i) { if (i <= base) { return "transparent"; } else { return "#fff"; } })
        .attr("transform", "translate(250,250)")
        .on("click", function(d, i) { alert(d.length); });


我几乎尝试了所有事情:将值传递到IF之前的变量中,并使用parseInt(d.length)以防万一,尝试大胆嵌套另一个函数/return(d.length),但无济于事。

这是某种错误还是真的,真的让我过了?

任何输入将不胜感激!

P.-S.是的,数据是伪数据,通常我的数据数组填充有不同长度的数组,因此是着色的条件。在示例中,我只是简化了说明行为。

最佳答案

for (var i = 1;...的索引0开始,所以for (var i = 0;....

(由于没有d [0]的数据,因此之前变得未定义。)

这是具有所需更改的fiddle

关于javascript - D3-无法在IF语句中访问d.length,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23749411/

10-15 14:46