2017-06-30 8 views
1

私はd3.js(および一般的なJavaScript)を多少新しくしました。私は現在http://bl.ocks.org/robschmuecker/7926762にあるものに似たような木に取り組んでいます。いくつかのノードを含まないようにいくつかのフィルタリングを追加しようとしています。私はそれらを隠さないことを望んでいる、私は彼らが木の中に全くいなくてもいいようにしている。 Selecting only one json object in D3で同様の質問がありd3.selectのサブセットのみを選択する

// define the baseSvg, attaching a class for styling and the zoomListener 
var baseSvg = d3.select("#tree-container").append("svg") 
    .attr("width", viewerWidth) 
    .attr("height", viewerHeight) 
    .attr("class", "overlay") 
    .call(zoomListener); 

、多分

// Updating nodes 
    var node = svgGroup.selectAll("g.node") 
     .data(nodes, function(d) { 
      return d.id || (d.id = ++i); 
     }); 

、私は実際にどのように理解していない:私は、JSONファイルからのみ、特定のノードを選択するための関連すると考える2つの部分がありますその答えを使用する。

+0

それは私に聞こえます。この場合、javascriptを使用して、 'd3.JSON'によって返された' treeData'リストをフィルタリングすることができます。それはあなたがしたいことのように聞こえますか? – LondonRob

+0

@LondonRobこんにちは、返信ありがとうございます。私はそれを考えていませんでした。それはまさに私がやりたいことです。だから、 'treeJSON = d3.json(" vulnerabilities.json "、function(error、treeData){'それでは...試してみよう! –

+0

After!JSONがロードされ、 'treeData'が利用できる関数を開始します。その行の前にJSONがまだロードされていません。 – LondonRob

答えて

1

ツリーからいくつかのデータを削除する最も良い方法は、d3でデータを処理する前にデータの配列からデータを削除することです。

これは私が下に示さきた時点で、何らかのフィルタリングコードを追加することを意味:種類の外にそうD3とは何の関係もありませんJavaScriptで配列をフィルタリングする多くの方法がありますが、

// Get JSON data 
treeJSON = d3.json("manyNodes.json", function(error, treeData) { 

    // treeData is available here! Add filtering code... 
    // ... 

    // Calculate total nodes, max label length 
    var totalNodes = 0; 

この質問の範囲が、ここではあなたが始めるために例を示します

をあなたのJSONは、このようなアレイ戻ってきたと仮定します。

var treeData = [{name:'a', age:10}, {name:'b', age:20}, 
    {name:'c', age:30}, {name:'d', age:40}] 

をあなたはその後、を使用することができますは、次のように:あなたは*の前に*あなたは木を描くか、本当にまったくD3コードを呼び出すJSONをフィルタリングするよう

> treeData.filter(function(d) { return d.age > 20; }) 

Array filtering

+1

どのような素晴らしい答え!初心者フレンドリーなフォーマットをありがとう!ありがとう/ David –