D3工具提示错误:“无法读取未定义的属性'-1'”

时间:2017-11-02 21:41:31

标签: javascript arrays d3.js

我正在尝试创建类似这样的工具提示:http://bl.ocks.org/sdbernard/2e44bd82c9d048b88451/2b31b98b8f6acb8d7c6026b5eec801e2f1f61ab2

该块的底层代码和数据结构类似于我自己的代码和数据结构,除了我也做了小倍数。这是我的Plunker:http://plnkr.co/edit/BsLMhbldIYvZEVOu23aM?p=preview

当我尝试将块的工具提示调整到我的可视化时,使用月份和年份 - 甚至只是年份(如原始版本) - 我收到错误消息:“无法读取属性'-1'未定义”< / p>

有问题的代码似乎在这里:

              var mousex = d3.mouse(this);
              mousex = mousex[0] + 10;
              var invertedx = xScale.invert(mousex);

// This doesn't work:  //
                invertedx = invertedx.dates;   
                var selected = (d.value);
                mousedate = dates.indexOf(String(invertedx));
                pro = d.value[mousedate].y;

这也不起作用:

            invertedx = invertedx.getMonth() + invertedx.getFullYear();
            var selected = (d.value);
            for (var k = 0; k < selected.length; k++) {
                dates[k] = selected[k].x
                dates[k] = dates[k].getMonth() + dates[k].getFullYear();
            }

            mousedate = dates.indexOf(invertedx);
            pro = d.value[mousedate].y; 

这是我的Plunker:http://plnkr.co/edit/BsLMhbldIYvZEVOu23aM?p=preview 我已经花了差不多一个星期的时间,没有太多或任何进展。提前,非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

到目前为止,我能找到的是如果你在问题区域之前进行console.log(d),那么你就没有定义d.value。我所看到的是d.values,它是一个数组。

此外,mousedate最终为-1,因为它没有寻找日期中的索引。

我可能还没有找到整个解决方案,但修复它应该会让你重新回到正轨,至少。