Я смотрел некоторый большой 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});
});
я не получил сразу, как в настоящее время объявлена вар узлы.
Моя первая догадка, чтобы перевести его в:
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});
As узлов [link.source] является объектом link.source берет свою ссылку. Это всегда происходит.
ИЛИ состояние, я не уверен, чтобы получить эту часть.
Я думаю, если узлы [link.source] определяется link.source = узлы [link.source] возвращающие нам не нужно идти дальше.
Если она не определена и возвращать ложь, положение силы или идти дальше ...
узлы [link.source] получает значение так благодаря ссылке link.source наведен к тому же значению.
Думаю, на этом этапе link.source пока не содержащей ссылку на узлов [link.source], но его первоначальное значение. Он будет содержать новую ссылку после запятой.
Я что-то не так? Пункт 2 мне кажется странным.
Внешняя проверка 'если (link.source! = Узлы [link.source]) {' это на самом деле не нужно в этом случае (и не присутствуют в исходном коде). –
Это неявное ('link.source' должно быть равно« узлам [link.source] 'в конце) и будет препятствовать установке' link.source = nodes [link.source]; 'более одного раза для повторяющихся значений , – manji
Это карта - не знаете, как вы получите дубликаты ценностей? И нет, это не подразумевается. Исходный код мог бы выполнять несколько присвоений, если бы были дубликаты значений. –