对于uni类,我必须编写可视化。因此,我想写一个单独的水平条,显示百分比基数的数据集的大小。我找到了关于如何做到这一点的理论,但现在我解决了一个特定的问题:
我有一个数据集作为csv id,name,age
,一切正常,只有一件事。为了获得“条形”的新x位置,我必须从预绘制条的宽度和x值计算出值。到目前为止一切都很好。
计算widht我有以下功能:
function calcWidth(data,i,scale) {
return scale(parseInt(dataset[i].age));
}
通过我指定的rect给出了a的宽度。 计算x值的函数如下所示:
function calcX(data,i,scale) {
if(i == 0) { // because i=0-1 would not be possible and zero anyhow
return 0;
}
else {
var xold = svg.select("rect[id='"+i-1+"']").attr("x");
console.log(xold);
return parseFloat(xold) + calcWidth(data,i-1,scale);
}
}
问题在于,如果我尝试这样做,我会犯错误,以便了解整个 xold 行是否有效我想console.log(xold);
看看对于每个null
,我打印的所有内容都是i
。
我在正常的for循环中尝试了xold行,并且它正在工作,我得到每个i的值。
也许你们其中一个人知道如何解决这个问题。
答案 0 :(得分:0)
我会尝试在i-1周围添加一些括号:
var xold = svg.select("rect[id='"+(i-1)+"']").attr("x");
否则javascript将首先将i连接到字符串上(使用"字符串+
),然后-1
赢得的行为与您期望的一样。
您似乎正在提供仅仅是数字的rect
个ID。我知道HTML中有时会出现带有数字的ID的问题,我不确定SVG是否也是如此,但我建议给它们r1
,{{1}这样的ID等等
如果这没有帮助,那么您可以在jsfiddle.net上放一些代码副本供我们玩吗?