我對JavaScript和d3相對比較陌生,但我對強制定向佈局非常感興趣。在邁克·博斯托克的力指向可視化效果,他傾向於使用下面的代碼(或類似)從一個鏈接列表解析節點:解釋Mike Bostock節點解析循環
var links = [
{source: "A", target: "B"},
{source: "B", target: "C"},
{source: "C", target: "A"}];
var nodes = {};
links.forEach(function(link) {
link.source = nodes[link.source] || (nodes[link.source] = {name: link.source});
link.target = nodes[link.target] || (nodes[link.target] = {name: link.target});
});
我徹底明白了什麼,他最終完成在這裏,我只是想了解的JavaScript在forEach
循環語法更好(實際上,在所有)。如果有人能解釋,我會很感激。
這顯然是非常優雅的代碼,但我無法在互聯網上的任何地方找到解釋 - 我可能在我的搜索中缺少一個關鍵術語,所以我不情願地在這裏問這個問題。什麼是真正扔我送行:
- 什麼的
||
的兩側的兩個任務做, - 每行(每個
||
左側)的第一次分配的順序:爲什麼是例如,link.source = nodes[link.source]
而不是nodes[link.source] = link.source
。
好的,這有助於理解語法(a = b || c等同於a = b,但如果b未定義,則a = c,對不對?)。仍然沒有意義的是爲什麼這些作業的左側是link.source和link.target?那些已經定義好了,它們就是我們想要用來填充節點的東西。這是否是獲得||的RHS的一個聰明的方法在節點缺少特定源或目標時執行? – twgardner2
爲您的評論添加了解釋 – Cyril