d3试图使用回调" i"作为索引

时间:2014-08-09 10:08:23

标签: javascript svg d3.js

对于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的值。

也许你们其中一个人知道如何解决这个问题。

1 个答案:

答案 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上放一些代码副本供我们玩吗?