找到链接链

时间:2016-02-08 10:14:12

标签: javascript arrays object dictionary

使用lodash,我创建了一个对数组,每个对代表一个链接的源和目标。因此,对于给定的链接路径,我有:

[ [a, b], [a, c], [d, c] ]

第一个元素是链中的第一个链接。 我原本想将这些对映射到键/值映射对象中,然后通过键和/或值来查找头部。

简化算法:

keys.contains(a) || values.contains(a)

如果要么返回true(当然不包括对子本身),那么它不是头部。 所以,从第一对开始,keys.contains(a)|| values.contains(a)返回true,因此它不是head,而key.contains(b)|| values.contains(b)返回false - 所以它必须是头部。

问题:我无法将对映射到对象中,因为可能存在相互覆盖的键/值重复。

即,对于上面的例子,结果对象将是:

{
   a: c,
   d: c
}

我知道我可以循环使用它们,但是我不愿意这么多循环,除非我必须...

有关更有效解决方案的想法吗?

1 个答案:

答案 0 :(得分:0)

我假设源是键,目标是值。有向图的根是那些不作为值出现的键。 (叶子:反之亦然)。

a将是一个根,以及dbc不是。您的情况应为keys.contains(a) && !values.contains(a)

如果对象指向彼此([ [a, b], [b, a] ])或某些东西指向自身([ [a, a] ]),您可能根本没有根。

现在,如果您消除了自引用,则可以收集键和值。为了得到根,你遍历键并测试它们是否不是值。要获取叶子,您将遍历值并测试它们是否不是密钥。

HTH,但我不确定我是否理解你的问题。