• 締切済み

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

みんなの回答

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.1

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

chiku-san
質問者

お礼

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

関連するQ&A