Выбор только подмножества в d3.select

1

Я несколько новичок в 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, но я не понимаю, как использовать этот ответ.

  • 0
    Для меня это звучит так, будто вы хотите отфильтровать JSON до того, как начнете рисовать дерево, или вообще вызвать какой-либо код D3. В этом случае вы можете использовать javascript для фильтрации списка treeData возвращаемого d3.JSON . Похоже ли это на то, что вы хотите сделать?
  • 0
    @LondonRob Привет, спасибо за ответ. О, я даже не думал об этом, это именно то, что я хочу сделать ... поэтому я предполагаю, что это было бы незадолго до того, как treeJSON = d3.json("vulnerabilities.json", function(error, treeData) { then. .. Я попытаюсь!
Показать ещё 2 комментария
Теги:
d3.js

1 ответ

2
Лучший ответ

Лучший способ удалить некоторые данные из дерева - удалить его из массива данных, прежде чем делать что-либо с ним в 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; })

Изображение 174551

  • 1
    Какой отличный ответ! Спасибо за новенький дружественный формат! С уважением / Дэвид

Ещё вопросы

Сообщество Overcoder
Наверх
Меню