javascript - 如何将变量带入 d3 中的 .each 方法的范围

标签 javascript d3.js

我正在使用 d3 并希望将一些变量传递到由 selection.each() 调用运行的函数的范围内。我在外部函数中声明变量 eD,然后在该函数中,在声明我的变量之后,对类 的所有内容运行匿名函数>.点数。我的问题是,如果不将它们设为全局变量,我似乎无法将 De 放入内部函数的范围内。有没有一种简单的方法可以将它们传递给内部函数?

function endSelection(d){
    var e = selector.extent();
    var D = d;

    mainSVG.selectAll(".points")
        .each(function(d){
            if(d[D.x] >= e[0][0]){
                d3.select(this).call(addClass,["foo"])
                d3.select(this).call(removeClass,["bar"])
            } else {
                d3.select(this).call(addClass,["bar"])
                d3.select(this).call(removeClass,["foo"])
            };
        });
}

最佳答案

您不需要在该匿名函数的形式参数中列出“d”。

mainSVG.selectAll(".points")
    .each(function(){
        if(d[D.x] >= e[0][0]){

在外部作用域中声明的变量在内部作用域中总是可用,除非它们被相同标识符的更内部声明“遮蔽”。这就是您的代码中发生的事情。

你根本不需要“D”;仅引用“d”。现在,如果 d3 代码将一些有用的东西传递给用作 .each() 迭代器的函数,则声明它,但给它一个不同于“d”的名称:

mainSVG.selectAll(".points")
    .each(function(not_d){
        if(not_d[d.x] >= e[0][0]){

关于javascript - 如何将变量带入 d3 中的 .each 方法的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15388078/

相关文章:

javascript - 仅当用户使用过滤器时如何显示 ng-repeat 元素

javascript - 使用 Jquery 更改 li 元素的类

javascript - 在云函数中获取文档值

javascript - 是否有类似强制布局但支持点击事件的 D3 布局引擎

javascript - 修复 D3 力导向布局中的节点位置

javascript - 通过 phpmailer 发送电子邮件不会返回 Javascript 响应

javascript - 更改 innerHTML onmousemove 事件

javascript - 获取 d3.js 中的事件函数

javascript - Chrome 开发工具中的长帧

javascript - 如何使用 D3js 围绕圆形路径绘制圆圈