0

我在屏幕上有一个图表,所有需要的数据都在一个名为 的变量中jsonData,这是我避免将 JSON 文件单独存储在服务器上的方法。现在jsonData包含的内容比我真正想要在开始时显示的要多,所以我必须选择所需的节点。这个想法是有一个根节点并显示与其直接连接的所有节点以及它们之间的连接。有没有简单的可能性来做到这一点?也许我可以换行

var node = svg.selectAll(".node")
  .data(jsonData.nodes)
.enter().append("g")
  .attr("class", "node")
  .call(force.drag);

因为它不需要选择所有这些,但是我怎样才能选择需要的呢?我在后台有一个数组,其中包含所有需要的链接,我正在编写一个存储连接节点的部分。我不能将这个新数组直接提供给svg.selectAll-part,因为否则链接会崩溃(它们通过它在更大数组中的原始位置来引用节点的编号)。有什么提示吗?我无法通过谷歌研究找到任何例子,但如果你能在网上发现一些东西,请随时用链接回答!

在此先感谢,大卫

4

1 回答 1

0
function getNodesIndex(searchedFor){
    for(var i = 0; i < jsonData.nodes.length; i++){
        if(jsonData.nodes[i].name == searchedFor){
            return i;   
        }
    }//for
}

function getNetParts(searchedFor){
    reqNodes = null;
    reqNodes = [];
    reqLinks = null;
    reqLinks = [];

    var index = getNodesIndex(searchedFor);
    reqNodes.push(jsonData.nodes[index]);   

    for(var y = 0; y < jsonData.nodes[index].connections.length; y++){
        //stores every node connected with the main node in reqNode
        reqNodes.push(jsonData.nodes[jsonData.nodes[index].connections[y]]);    
    }

    for(var z = 1; z < reqNodes.length; z++){                   
        //circle through stored Nodes
        for(var c = 0; c < reqNodes[z].connections.length; c++){    
            //inspect all of their connections
            for(var w = 0; w < reqNodes.length; w++){
                //check all stored reqNodes for the one linked
                if(jsonData.nodes[reqNodes[z].connections[c]].name == reqNodes[w].name)           { 
                    //the node is available at reqNodes?
                    var source = null; 
                    var newLink = {
                        "source":z,
                        "target":w,
                        "value":1,
                    };                          
                    reqLinks.push(newLink);                 
                }
            }   
        }   
    }
}

然后update()只需删除屏幕上的任何内容,获取新数据并重建可视化。以防万一有人遇到同样的麻烦... ;)

于 2012-09-18T06:28:32.643 回答