在对象数组中查找互连的ID

时间:2014-05-01 00:52:30

标签: javascript d3.js

我有一个对象数组,表示在D3强制有向图中使用的对象之间的id连接。源键和目标键都代表ID。它看起来像这样:

var links: [
{ source: 1, target: 0 }, 
{ source: 1, target: 2 }, 
{ source: 1, target: 3 }, 
{ source: 1, target: 4 }, 
{ source: 1, target: 5 }, 
{ source: 2, target: 3 }, 
{ source: 2, target: 4 }, 
{ source: 2, target: 5 }, 
{ source: 3, target: 4 }, 
{ source: 3, target: 5 }, 
{ source: 4, target: 5 }, 
{ source: 6, target: 7 }, 
{ source: 8, target: 7 }, 
{ source: 9, target: 7 }, 
{ source: 7, target: 0 } ]

Ids 1到5相互连接,这样当在d3中渲染时,您会看到它们形成一个五角星,就像它们在这里一样:http://jsfiddle.net/6DTMp/

你如何迭代这个数组来找到彼此互连的对象,就像ids 1到5一样?我正在寻找的最终结果是有一组id组成D3图形上构成5角星的节点。

1 个答案:

答案 0 :(得分:0)

我用for / in迭代边缘并存储我在一个对象中看到的所有内容,该对象将id映射到相邻节点列表。

类似的东西。

var map = {};
for( var k in links ) {
    var src = links[k].source;
    var tgt = links[k].target;

    if( typeof map[src] === "undefined" ) {
        map[src] = [];
    }
    map[src].push(tgt);

    if( typeof map[tgt] === "undefined" ) {
        map[tgt] = [];
    }
    map[tgt].push(src);
}