2016-02-08 45 views
0

使用lodash,我創建了一個數組對,每個對都代表鏈接的源和目標。因此,對於一個鏈接給定路徑,我有:查找鏈接鏈的頭部

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

這是一個給定的第一個元素是在鏈中的第一個環節。 我原本想將這些對映射到鍵/值映射對象中,然後通過鍵和/或值來查找頭部。

簡化算法:

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

如果任一爲真(不包括對本身,天然地),然後它不是頭。 因此,從第一對開始,keys.contains(a)|| values.contains(a)返回true,所以它不是頭部,而keys.contains(b)|| values.contains(b)返回false - 所以它必須是頭部。

問題:我無法將這些對映射到一個對象中,因爲可能存在互相重疊的鍵/值重複項。

即上面的例子中,生成的目標將是:

{ 
    a: c, 
    d: c 
} 

我知道我可以通過他們循環,但是我不願意做這麼多的循環,除非我不得不...

更高效的解決方案的任何想法?

+0

我真的不明白keys.contains(a)|| (a)暗示這一對是頭或不是。你能詳細說明什麼是「頭」,以及你如何使用contains()? – Glubus

回答

0

我假設來源是關鍵,目的地是價值。有向圖的根源是那些不作爲值出現的鍵。 (葉子:反之亦然)。

a將是一個根,以及dbc不是。你的情況應該是keys.contains(a) && !values.contains(a)

如果對象指向對方([ [a, b], [b, a] ])或某物指向自己([ [a, a] ]),您可能根本沒有根。

現在,如果您消除了自引用,則可以收集鍵和值。爲了得到根,你遍歷鍵並測試它們是否不是一個值。爲了獲得葉子,你迭代這些值並測試它們是否不是關鍵。

HTH,但我不知道我是否正確理解您的問題。