javascript - 为什么将变量设置为自身就能使事情正常进行?

标签 javascript d3.js

我有两段代码,第 1 段代码不起作用,但第 2 段代码起作用。

第 1 部分

  let g = circle.data(that.nodes, d => d.id);
  g.exit().remove();
  g = g.enter().append("svg:g").call(drag).merge(g)

第 2 部分

  let g = circle.data(that.nodes, d => d.id);
  g.exit().remove();
  g = g.enter().append("svg:g");
  g = g.call(drag).merge(g);

但是,有趣的是,如果我在不工作的代码末尾记录 g ,我会得到:

enter image description here

但是如果我记录工作代码,我实际上得到:

enter image description here

最佳答案

尽管评论中已经解释了这个问题,但正确的答案是必要的。

这里的主要概念是一些方法,如 enter(),返回一个选择。话虽这么说,让我们看看您的工作片段,Piece #1:

let g = circle.data(that.nodes, d => d.id);

这是您的更新选择,因此我们将其称为更新

然后,在那之后,你有:

update = update.enter().append("svg:g").call(drag).merge(update)

如前所述,enter() 返回一个新选择。我们称之为enter。所以,事实上,你有这个:

update = enter.merge(update);

这是合并选择的正确(惯用)方法。

现在,让我们看看您的第二个(非工作)片段,Piece #2。在第三行你有:

update = update.enter().append("svg:g");

您刚刚将更新变成了输入选择。因此,在下一行中,您将看到:

enter = enter.merge(enter);

这当然是行不通的:您正在合并输入选择。

关于javascript - 为什么将变量设置为自身就能使事情正常进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58629704/

相关文章:

javascript - 如何从命令按钮中取消选择 primefaces selectCheckboxMenu 中的所有元素

javascript - 如何设置 Summernote 编辑器的百分比宽度

javascript - 如何重新定位 d3 中的数据点?

javascript - D3 类之间的转换

javascript - d3 v4 缩放事件未针对鼠标滚轮/触摸屏触发

javascript - 三元语句未返回正确的数据

javascript - Vis.js 时间线动态变化

javascript - 未评估 Angular Directive(指令)属性

javascript - JavaScript 表达式中的多重赋值和语法解释

javascript - 使用 D 3's pie chart to demonstrate JSON' s 每个集合