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

Javascript 在对象数组中查找互连ID,javascript,d3.js,Javascript,D3.js,我有一个对象数组,它通过id表示D3力定向图中使用的对象之间的连接。源键和目标键都表示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:

我有一个对象数组,它通过id表示D3力定向图中使用的对象之间的连接。源键和目标键都表示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 } ]
ID 1到5以这样的方式相互连接:当在d3中渲染时,您会看到它们形成一个5点星,就像它们在这里所做的那样:


您将如何迭代这个数组,以找到以IDs1到ID5相同的方式相互连接的对象?我要寻找的最终结果是拥有一个ID数组,这些ID组成D3图上的节点,这些节点构成了五角星。

我会使用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);
}


id
在每个对象的哪个部分中,源对象和目标对象都是id。1连接到2、1到3、1到4、1到5、2到3、2到4、2到5等等。那么您预期的结果是什么?包含每个节点的邻居的数组?@juvian用最终结果更新了答案,这是一个ID数组,组成D3图上的节点,形成五角星。您缺少
var map=[]这是找到解决方案的步骤之一,但它无法确定哪些ID彼此“互连”,这最终会将一些ID排除在映射本身之外。所谓互连,您的意思是不直接连接,而是通过其他节点,例如,如果1 2和2 3,那么结果中应该出现1 3?@Martin by interconnected,我指的是所有相互连接的ID。在这里,您可以看到五个相互连接的节点。因为它们都相互连接,所以它们形成一个星形。如果我理解正确,你想在图中找到“完整子图”,其中“完整”意味着所有顶点都直接相互连接。您可能应该看看这个: