Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3.js基于从json文件获取的动态数据筛选节点_Javascript_Json_D3.js - Fatal编程技术网

Javascript d3.js基于从json文件获取的动态数据筛选节点

Javascript d3.js基于从json文件获取的动态数据筛选节点,javascript,json,d3.js,Javascript,Json,D3.js,我已显示/隐藏我的部队布局图的链接/节点。 然而,我想从文件中动态读取我的类别列表,我不想硬编码它们。所以我已经有了这个: function createFilter() { d3.select(".filterContainer").selectAll("div") .data(["category1", "category2", "category3"]) .enter() .append("d

我已显示/隐藏我的部队布局图的链接/节点。 然而,我想从文件中动态读取我的类别列表,我不想硬编码它们。所以我已经有了这个:

function createFilter()
    {

        d3.select(".filterContainer").selectAll("div")
            .data(["category1", "category2", "category3"])
            .enter()
            .append("div")
            .attr("class", "checkbox-container")
            .append("label")
            .each(function(d) {
                // create checkbox for each data
                d3.select(this)
                    .append("input")
                    .attr("type", "checkbox")
                    .attr("id", function(d) {return "chk_" + d;})
                    .attr("checked", true)
                    .on("click", function(d, i) {
                        // register on click event
                        var lVisibility = this.checked? "visible":"hidden";
                        filterGraph(d, lVisibility);
                    })
                d3.select(this).append("span")
                    .text(function(d){return d;});
            });

    }
如何更改数据以从包含对象数组的CategList中读取类别,每个对象包含,例如:

{
    "nodes": [
        {"country": "US", "name": "saint peter's"},
        {"country": "Brazil", "name": "saint joseph's"}        
        ...
    ],
    "links": [ ... ],
    "CategList": [
                {
                    "categ": "category1",
                    "id": "US"
                },
                {
                    "categ": "category2",
                    "id": "BR"
                },
                {
                    "categ": "category3",
                    "id": "DE"
                },
            ]   
}
如何循环遍历所有对象并提取类别并将其传递给d3的.data

更新: 如何将其传递到multiselector的下拉菜单中,而不是作为复选框传递到.filterContainer中

<div class="checkbox new-check check-primary">
    <input type="checkbox"  id="type_filter" />
    <label for="type_filter">Types</label>
    <br>
</div>
<select class="selectpicker" id="type_multiselector" multiple>
    <option>category1</option>
    <option>category2</option>
    <option>category3</option>
</select>

只需映射数据,创建一个只包含类别的新变量,然后将其传递给d3

大概是这样的:

const json = {
  "nodes": [
    {"country": "US", "name": "saint peter's"},
    {"country": "Brazil", "name": "saint joseph's"}        
  ],
  "links": [  ],
  "CategList": [
        {
          "categ": "category1",
          "id": "US"
        },
        {
          "categ": "category2",
          "id": "BR"
        },
        {
          "categ": "category3",
          "id": "DE"
        },
      ]   
}

const myData = json.CategList.map(o => o.categ)

function createFilter()
{

    d3.select(".filterContainer").selectAll("div")
        .data(myData)
        .enter()
        .append("div")
        .attr("class", "checkbox-container")
        .append("label")
        .each(function(d) {
            // create checkbox for each data
            d3.select(this)
                .append("input")
                .attr("type", "checkbox")
                .attr("id", function(d) {return "chk_" + d;})
                .attr("checked", true)
                .on("click", function(d, i) {
                    // register on click event
                    var lVisibility = this.checked? "visible":"hidden";
                    filterGraph(d, lVisibility);
                })
            d3.select(this).append("span")
                .text(function(d){return d;});
        });

}
回应您的评论:我不太清楚,但大致如下:

function createFilter()
{

    d3.select(".filterContainer").selectAll("div")
        .data(myData)
        .enter()
        .append("div")
        .attr("class", "select-wrapper")
        .append("select")
        .each(function(d) {
            // create select option for each data
            d3.select(this)
                .append("option")
                .attr("id", function(d) {return "chk_" + d;})
                .text(function(d){return d;});
        });

}

有没有可能根据我发布的问题更新来更新你的答案?既然您回答了这个问题,我想您也会很容易找到更新的解决方案。无论如何,我已经接受了你的回答,因为它回答了主要部分。谢谢你我不知道,但是我已经更新了我的答案给你一些想法。你知道为什么phpstorm抛出一个const myData=TypesTab.mapo=>o.type的语法错误吗;如果=>表达式为预期表达式,如果为;应为换行符或分号。你知道为什么吗?我不知道,对不起。