1

可能微不足道,但我似乎有一个嵌套数据情况,我找不到任何指导。我有一个表示时间进程(索引)的数组,其中数据仅间歇性可用:

elem[..]
elem[55].path[..]
elem[56]
elem[57]
elem[58].path[..]
elem[59]
elem[60].path[..]
elem[..]

空数据点为空:

elem[count] = null;

..然而,等待进一步使用,路径元素使用以下方式初始化:

elem[count].path = [];

收集了一个大数据集。在以下两个代码块的第一个中,我选择了数组索引

classes[chan_index].elem_num_container = "elem_num_container" + "_" + comp_id + "_" + chan_index;

chan_selector.elem_num_container[chan_index] = chan_selector.vis_container[chan_index]
.selectAll(classes[chan_index].elem_num_container)
.data(function(d, i) {
    return d;
})
.enter()
.append("svg:g")
.attr("class", function(d, i) {
    return classes[chan_index].elem_num_container;
});

鉴于如此多的空元素,在第二个块(如下)中,嵌套的 d.path 可以理解地引发“groupData is undefined”错误。

classes[chan_index].path_container = "path_container" + "_" + comp_id + "_" + chan_index;

chan_selector.path_container[chan_index] = chan_selector.elem_num_container[chan_index]
.selectAll(classes[chan_index].path_container)
.data(function(d, i) {
    return d.path;
})
.enter()
.append("svg:g")
.attr("class", function(d, i) {
    return classes[chan_index].path_container;
});

基本上它归结为基于“d”参数选择数据,然后是“d.value”上的嵌套选择。在保留索引的同时,我需要避开错误并选择它们存在的 d.path 元素。

我看到很多嵌套的 JSON 数据示例,但没有适用于这种情况。

被阻止了,感谢任何帮助.. Thx

4

1 回答 1

1

从上面的回答来看,消除空元素显然是可行的,这对传入数据(检查:一切正常)和 d3 处理层次结构(格式错误:两个处理分支挂在同一个节点上,一个传播数据,另一个- 上面有问题的分支 - 不是)。

作为回应,使用新的插页式 svg:g 容器结构将两个分支与其父分支分开。结果:两个分支上的数据。

然后,正如上面的回复中所建议的那样,我使用 d.path 在有问题的处理分支上添加了一个过滤器(即在原始问题中的第一个和第二个代码块之间),形式为:

chan_selector.temp[chan_index] = chan_selector.elem_num_container[chan_index]
.filter(function(d) { return typeof(d.path) === 'object'; });

奇怪的是(考虑到过滤器对索引的影响)它起作用了,给出了习惯的 d3 eyecandy。:-)

感谢 Superboggly 和 Lars Kotthoff 的宝贵帮助和耐心。

于 2013-07-02T08:35:08.270 回答