我一直在寻找一些伟大的d3.js code examples当我看到这样的:变量声明有条件语法
var links = [
{source: "test1", target: "test2"},
{source: "test1", target: "test3"},
{source: "test2", target: "test3"},
{source: "test3", target: "test4"}
];
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});
});
如何VAR节点正在宣布我没有马上得到。
我的第一个猜测是把它翻译成:
links.forEach(function(link) {
if(link.source != nodes[link.source]){
nodes[link.source] = {name: link.source};
}
if(link.target != nodes[link.target]){
nodes[link.target] = {name: link.target};
}
});
但链接不再被绘制。
这两种方法有什么区别?
初始语法的意义是什么,仅仅是一个快捷方式还是增加了性能?
在这种情况下是否有最佳做法?
编辑
所以,如果我试图充分了解
link.source = nodes[link.source] || (nodes[link.source] = {name: link.source});
由于节点[link.source]是一个对象link.source采取它的参考。这一直在发生。
或者条件,我不确定那部分。
我想,如果节点[link.source]定义link.source =节点[link.source]返回真的,我们并不需要更进一步。
如果它没有定义并返回false,or子句力走得更远......
节点[link.source]得到一个值,由于link.source指向的参考达到相同的价值。
我想在此阶段link.source尚未包含到节点[link.source]的引用,但是它的初始值。它将在逗号后面包含新的参考。
我错了吗?点2对我来说似乎很陌生。
外校验'如果(link.source!=节点[link.source]){'是不是在这种情况下实际需要的(并且不存在于原始代码中)。 –
这是隐含的('link.source'应该和'nodes [link.source]'最后一样),并且会阻止设置'link.source = nodes [link.source];'重复值不止一次。 – manji
这是一张地图 - 不知道你将如何获得重复值?不,这不是隐含的。如果有重复的值,原始代码将进行多个分配。 –