Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在循环中使用selection.filter方法将D3选择划分为组_Javascript_D3.js_Filter - Fatal编程技术网

Javascript 如何在循环中使用selection.filter方法将D3选择划分为组

Javascript 如何在循环中使用selection.filter方法将D3选择划分为组,javascript,d3.js,filter,Javascript,D3.js,Filter,这是我在这里的第一篇帖子,如果它看起来有点笨拙,我道歉 我正在使用D3.js制作一个力定向图。我遇到了过滤器功能的问题。以下是我的情况: 我已经在我的图中创建了具有很多特性的节点。我想首先能够创建所有这些节点的子集,基于用户认为可能是相关功能的内容,并进行可视化分析 例如,我正在处理roses图像(这是我的节点),我想根据它们的圆度对它们进行过滤。圆度特性可以从0到1000,所以我首先尝试创建5个子集。第一个节点的圆度为0到200,第二个节点的圆度为200到400,以此类推。。。直到最后一个子集

这是我在这里的第一篇帖子,如果它看起来有点笨拙,我道歉

我正在使用D3.js制作一个力定向图。我遇到了过滤器功能的问题。以下是我的情况: 我已经在我的图中创建了具有很多特性的节点。我想首先能够创建所有这些节点的子集,基于用户认为可能是相关功能的内容,并进行可视化分析

例如,我正在处理roses图像(这是我的节点),我想根据它们的圆度对它们进行过滤。圆度特性可以从0到1000,所以我首先尝试创建5个子集。第一个节点的圆度为0到200,第二个节点的圆度为200到400,以此类推。。。直到最后一个子集,从800到1000

为了得到子集,我使用了d3.js的filter函数。这就是我遇到的问题:

注意:-var“nodes”是我的一组节点,它们都存在。 -变量“groups=[]”将包含我的五个节点子集。 -var“thresholds=[]”包含我的所有阈值。例如:阈值[0]==0,阈值[1]==200,阈值[2]==400

for(i=0;i<5;i++)//正在创建5个子集
{
组[i]=节点.过滤器(函数(d,i)
{   

返回d.Shape\u Roundness>thresholds[i]&&d.Shape\u Roundness问题是,您使用变量
i
作为for循环的loopvariable,并作为过滤器部分中匿名函数的参数

在匿名函数中,只能访问参数
i
,并且循环变量不可见,因为它具有相同的名称。这称为

正如D3的文档所解释的,为
filter
函数的回调提供的第二个参数是节点的索引。因此,在回调中,您可以访问
节点的第一个节点的
阈值[0]
,第二个节点的
阈值[1]
,依此类推

由于过滤器不需要当前节点的索引,最简单的修复方法是省略
i
参数,如下所示:

for(i = 0 ;  i < 5 ; i++) { //going through the creation of 5 subsets 
  groups[i] = nodes.filter(function(d) { 
    return d.Shape_Roundness > thresholds[i] && d.Shape_Roundness <= thresholds[i + 1];
    //Get the nodes "d" which have a roundness superior to a minimum threshold and inferior to a maximum threshold
  });
}
for(i=0;i<5;i++){//正在创建5个子集
组[i]=节点。筛选器(函数(d){

返回d.Shape_Roundness>thresholds[i]&&d.Shape_Roundness是否尝试更改节点中的filter(函数(d,i)).filter(函数(d,j))?可能与两个不同的变量“i”冲突在同一个范围。该死!非常感谢,这完全回答了我的问题。下次我需要更加小心!Purag,感谢编辑和Cubi和JZZMN,非常感谢你的回答!我可以帮助你解决你的问题。)对于未来,请考虑投票回答和评论,而不是张贴“谢谢”。注释。如“帮助”部分所述,这是不需要的
for(i = 0 ;  i < 5 ; i++)                       //going through the creation of 5 subsets
{
    groups[i] = nodes.filter(function(d, i)
    {   
            return d.Shape_Roundness > 0 && d.Shape_Roundness <= 200;
    });
}
for(i = 0 ;  i < 5 ; i++) { //going through the creation of 5 subsets 
  groups[i] = nodes.filter(function(d) { 
    return d.Shape_Roundness > thresholds[i] && d.Shape_Roundness <= thresholds[i + 1];
    //Get the nodes "d" which have a roundness superior to a minimum threshold and inferior to a maximum threshold
  });
}