我对 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});
});
我完全理解他在这里最终完成了什么,我只是想forEach
更好地理解循环中的 JavaScript 语法(实际上,完全没有)。如果有人可以解释,我将非常感激。
这显然是非常优雅的代码,但我在互联网上的任何地方都找不到解释——我可能在搜索中遗漏了一个关键术语,所以我很不情愿地在这里问这个问题。真正让我失望的是:
- 两边的两个任务是
||
做什么的, - 每行的第一次分配的顺序(每行的左侧
||
):例如,为什么link.source = nodes[link.source]
不是nodes[link.source] = link.source
。