D3.js 如何使用D3JS在.attr中写入if条件
我在函数中创建了两个if条件,但它只接受一个if条件并返回该条件。我需要同时执行这两个if条件,或者我们如何使用D3JS在.attr('x2',d=>self.x(0))之前写入条件D3.js 如何使用D3JS在.attr中写入if条件,d3.js,polymer-1.0,D3.js,Polymer 1.0,我在函数中创建了两个if条件,但它只接受一个if条件并返回该条件。我需要同时执行这两个if条件,或者我们如何使用D3JS在.attr('x2',d=>self.x(0))之前写入条件 function updateLines(select) { if(data.filter(d => d.esp != null) || (d => d.esp == 0)){ return select .attr('y1', d => self
function updateLines(select) {
if(data.filter(d => d.esp != null) || (d => d.esp == 0)){
return select
.attr('y1', d => self.y(d.esp))
.attr('y2', d => self.y(d.esp))
.attr('x1', d => self.x(d.hour)-3)
.attr('x2', d => self.x(d.hour)+3 + self.x.bandwidth())
}
if(data.filter(d => esp == null)){
return select
.attr('y1', d => self.y(d.esp))
.attr('y2', d => self.y(d.esp))
.attr('x1', d => self.x(0))
.attr('x2', d => self.x(0))
}
}
检查应该在
.attr
级别进行,因为它将针对选择中的每个元素执行。您可以预先准备数据筛选器,并在.attr
回调中检查它们:
function updateLines(select) {
const nonNull = data.filter(d => d.esp !== null || d.esp === 0);
select
.attr('y1', d => self.y(d.esp))
.attr('y2', d => self.y(d.esp))
.attr('x1', d => nonNull.contains(d) ? self.x(d.hour)-3 : self.x(0))
.attr('x2', d => nonNull.contains(d) ? self.x(d.hour)+3 + self.x.bandwidth() : self.x(0))
}
假设选择是使用
.data(data)
创建的,其中data
与updateLines
函数中使用的对象数组相同 但这并不能同时满足这两个语句。它只执行一个true或false。让我们以我的senario数据为例{null,21,null,45,null,0}。如果该值为null,则在特定的小时或x轴上隐藏图表,如果该值为0,则在y轴上显示。但现在它显示为null或0不满足null和0