Я несколько новичок в d3.js (и javascript вообще). В настоящее время я работаю над деревом, подобным тому, которое найдено в http://bl.ocks.org/robschmuecker/7926762. Я хочу добавить некоторую фильтрацию, чтобы не включать определенные узлы. Я не хочу их скрывать, я хочу, чтобы они вообще не были в дереве (чтобы не путаться между ними и т.д.). Две части, которые, по моему мнению, релевантны для выбора только определенных узлов из json файла:
// 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 в D3, но я не понимаю, как использовать этот ответ.
Лучший способ удалить некоторые данные из дерева - удалить его из массива данных, прежде чем делать что-либо с ним в d3.
Это означает добавление некоторого кода фильтрации в пункте, указанном ниже:
// 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;
Есть много способов фильтровать массив в Javascript, который не имеет ничего общего с d3, так что из-за объема этого вопроса, но вот пример, чтобы вы начали:
Предположим, что ваш JSON вернул массив таким образом:
var treeData = [{name:'a', age:10}, {name:'b', age:20},
{name:'c', age:30}, {name:'d', age:40}]
Затем вы можете использовать Array.filter
следующим образом:
> treeData.filter(function(d) { return d.age > 20; })
treeData
возвращаемогоd3.JSON
. Похоже ли это на то, что вы хотите сделать?treeJSON = d3.json("vulnerabilities.json", function(error, treeData) {
then. .. Я попытаюсь!