我一直在努力解决这个问题,但是我真的无法弄清楚-也无法在网上找到与此相关的任何内容。虽然我是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/