1

おそらく些細なことですが、私はガイダンスを見つけることができない入れ子になったデータの状況にあるようです。データが断続的にしか利用できない時間進行 (インデックス) を表す配列があります。

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

空のデータ ポイントは null です。

elem[count] = null;

..一方、さらなる使用が保留されている場合、パス要素は次を使用して初期化されます。

elem[count].path = [];

大規模なデータ セットが収集されます。次の 2 つのコード ブロックのうち最初のブロックでは、配列インデックスを選択します。

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;
});

非常に多くの null 要素があると、2 番目のブロック (以下) で、ネストされた 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

上記の応答から、null 要素の削除は明らかに実行可能であると判断され、着信データ (チェック済み: すべて OK) と d3 処理階層 (不正: 2 つの処理ブランチが同じノードにハングアップし、1 つはデータを伝播し、もう 1 つはデータを伝播) に疑問を投げかけました。 -上記の問題のブランチ-ではない)。

これに対応して、新しいインタースティシャル svg:g コンテナ構造で 2 つのブランチを親から分離しました。結果: 両方のブランチのデータ。

次に、上記の回答で示唆されているように、d.path を使用して、問題の処理ブランチ (つまり、元の質問の最初と 2 番目のコード ブロックの間) に次の形式でフィルターを追加しました。

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

不思議なことに (フィルターがインデックス作成に与える影響が主張されていることを考えると)、それは機能し、慣れ親しんだ d3 の目を楽しませてくれます。:-)

Superboggly と Lars Kotthoff の貴重な助けと忍耐に感謝します。

于 2013-07-02T08:35:08.270 に答える