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
ループ内の構文(実際には、まったく)。誰かが説明できるなら、本当に感謝します。
明らかに非常にエレガントなコードですが、インターネット上のどこにでも説明がありません。検索で重要な用語が不足している可能性があるので、ここでは戸惑うほど質問しています。何が本当に私を投げている:
- 何
||
のどちらかの側の2つの割り当てを行う、 - 各行(各
||
の左側)の最初の割り当ての順序:なぜそれがありますlink.source = nodes[link.source]
は、例えば、nodes[link.source] = link.source
ではありません。link.source = nodes[link.source] || (nodes[link.source] = {name: link.source});
以下のコードで
これは、構文を理解するのに役立ちます(a = b || cはa = bと同じですが、bが未定義の場合はa = c、そうですか?)。それでもなお意味をなさないのは、これらの課題の左側がlink.sourceとlink.targetなのはなぜですか?それらはすでに定義されています。ノードを設定する必要があります。それはちょうど巧妙な方法ですか?特定のソースまたはターゲットがノードにない場合に実行する – twgardner2
コメントの追加説明 – Cyril