こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

javascriptのバーティカルバーの意味

javascriptに関して質問させて頂きます。宜しくお願い申し上げます。
D3jsの勉強をしているのですが、以下のサンプルで、

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});
});

このコードのしていることがよくわかりません。
処理後の結果を見ると何をしているのかが何となく分かるのですが、特にバーティカルバーでつないでいる式が何を意味するのかが分かりません。
比較演算子のようにも思えますが、処理の優先度を決めている?のかなあとも思いつつ、理解できませんでした。
詳しい方がいらっしゃいましたら、是非、ご教示願います。

https://gist.github.com/mbostock/1153292

var links = [
{source: "Microsoft", target: "Amazon", type: "licensing"},
{source: "Microsoft", target: "HTC", type: "licensing"},
{source: "Samsung", target: "Apple", type: "suit"},
{source: "Motorola", target: "Apple", type: "suit"},
{source: "Nokia", target: "Apple", type: "resolved"},
{source: "HTC", target: "Apple", type: "suit"},
{source: "Kodak", target: "Apple", type: "suit"},
{source: "Microsoft", target: "Barnes & Noble", type: "suit"},
{source: "Microsoft", target: "Foxconn", type: "suit"},
{source: "Oracle", target: "Google", type: "suit"},
{source: "Apple", target: "HTC", type: "suit"},
{source: "Microsoft", target: "Inventec", type: "suit"},
{source: "Samsung", target: "Kodak", type: "resolved"},
{source: "LG", target: "Kodak", type: "resolved"},
{source: "RIM", target: "Kodak", type: "suit"},
{source: "Sony", target: "LG", type: "suit"},
{source: "Kodak", target: "LG", type: "resolved"},
{source: "Apple", target: "Nokia", type: "resolved"},
{source: "Qualcomm", target: "Nokia", type: "resolved"},
{source: "Apple", target: "Motorola", type: "suit"},
{source: "Microsoft", target: "Motorola", type: "suit"},
{source: "Motorola", target: "Microsoft", type: "suit"},
{source: "Huawei", target: "ZTE", type: "suit"},
{source: "Ericsson", target: "ZTE", type: "suit"},
{source: "Kodak", target: "Samsung", type: "resolved"},
{source: "Apple", target: "Samsung", type: "suit"},
{source: "Kodak", target: "RIM", type: "suit"},
{source: "Nokia", target: "Qualcomm", type: "suit"}
];

var nodes = {};

// Compute the distinct nodes from the links.
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});
});

投稿日時 - 2014-12-05 03:24:46

QNo.8847674

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

「A || B」はAを評価して真の時はBは評価せずにAの評価値を返します。
偽のときはBを評価してBの評価値を返します。

投稿日時 - 2014-12-05 12:58:25

お礼

ありがとうございます!そういうことなのですね。
左でnodesに同じ添字がないかを判断して、あるなら何もしない、ないならnodesに追加ということで、link.source、link.targetそれぞれのユニークな値だけをnodesの添字と値に残すという感じですかね、ありがとうございました。

投稿日時 - 2014-12-05 16:50:59

あなたにオススメの質問