选择集的处理 : 过滤器
有时候需要根据绑定数据对某选择集的元素进行过滤,例如某公司,只对id大于100的员工进行奖励。某学校只选拔身高超过170cm的学生等。类似这样的问题,需要根据条件获取选择集的一部分子集,该方法成为过滤器。
 render() {
         return (
             <div id="body" >

             </div>
         );
     }
 // 定义数组,然后过滤到小于20的数,只选取大于20的数
         var dataList = [10, 20, 30, 40, 50, 60]
             .filter(function (d, i) {
                 if (d > 20) {
                     return true
                 } else {
                     return false
                 }
             })
         //选择id为body的容器赋值给变量body
         var body = d3.select("#body")

         body.selectAll("p")
             .data(dataList)
             .enter()
             .append("p")
             .text(function (d) {
                 return d
             })
当所绑定的数据的数值大于20时,返回true,否则返回false。即只有大于20的数值才能存在,其他的被过滤掉。显示的效果为 :
 
选择集的处理 : 选择集的顺序
sort()可以根据被绑定数据重新排列选择集中的元素。sort()的参数是一个无名函数,该函数也称作比较器。比较器的规则与JavaScript的Array.sort()一样。
 var dataList = [88,77,11,44,55,22,66,33,99,88,11,66]

         dataList.sort(function(a,b){
             return a-b
         })

         console.log(dataList)  // [11, 11, 22, 33, 44, 55, 66, 66, 77, 88, 88, 99]

         dataList.sort(function(a,b){
             return b-a
         })

         console.log(dataList)  //[99, 88, 88, 77, 66, 66, 55, 44, 33, 22, 11, 11]
 function(a,b){
     if(a<b){
         return -1;
     }else if(a> b){
         return 1
     }else{
         return 0
     }
 }
此比较函数有两个参数,当a应该位于b之前时则返回一个负数。当a位于b之后时,则返回一个正数。如果a和b相等,则返回0。根据以上规则,我们对选择集重新排序
 
选择集的处理 : each()的应用
each()允许对选择集的各元素分别处理。
 var dataList = [
             {id : 0,name:"zhangsan"},
             {id : 1,name:"lisi"},
         ]

         var body = d3.select("#body")

         body.selectAll("p")
             .data(dataList)
             .enter()
             .append("p")
             .each(function(d){
                return  d.age =18
             })
             .text(function(d,i){
                 return d.id + " " +d.name + " " +d.age
             })

上面代码中,被绑定的数据里没有age属性,然后我们通过each()函数为每一项添加了age属性,最后在text()中使用了此新属性。
 
选择集的处理 : call()的应用
call()允许将选择集自身作为参数,传递给某一函数。如
 d3.selectAll("div").call(myfun)
这段代码将选择集作为参数传递给myfun函数使用。等同于一下代码 :
 function myfun(seleciton){
     //在这里进行相关操作
     seleciton.attr("name","value");
 }
 myfun(d3.selectAll("div"))
在以后我们做图表的时候,可能会做拖拽,缩放等操作。那时候就会经常用到call()了。这里先简单了解一下即可。
 
 

D3.js的基础部分之选择集的处理 过滤器、选择集的顺序、each()和call()的应用(v3版本)的更多相关文章

  1. D3.js的基础部分之选择集的处理 enter和exit的处理方法 (v3版本)

    上一节给大家讲述额绑定数据的原理.当数组的长度与元素的数量不一致时,有enter部分和exit部分,前者表示存在多余的数据,后者表示存在多余的元素.本节将给大家介绍如何处理这些多余的东西,最后会给大家 ...

  2. D3.js的基础部分之数组的处理 数组的排序和求值(v3版本)

    操作数组   D3提供了将数组洗牌.合并等操作,使用起来是很方便的.   d3.shuffle(array,[,lo[,ji]]) : //随机排列数组. d3.merge(arrays) :   / ...

  3. D3.js的基础部分之数组的处理 映射(v3版本)

    映射(Map)   映射(Map)是十分常见的一种数据结构,由一系列键(key)和值(value)组成的.每个key对应一个value,根据key可以获取和设定value,也可以根据key来查询val ...

  4. D3.js的基础部分之数组的处理 集合(Set)(v3版本)

    数组的处理 之 集合(set) 集合(Set)是数学中常用的概念,表示具有某种特定性质的事物的总体.集合里的项叫做元素.集合的相关方法有:   d3.set([array]) //使用数组来构建集合, ...

  5. D3.js的v5版本入门教程(第五章)—— 选择、插入、删除元素

    D3.js的v5版本入门教程(第五章) 1.选择元素 现在我们已经知道,d3.js中选择元素的函数有select()和selectAll(),下面来详细讲解一下 假设我们的<body>中有 ...

  6. 【 D3.js 选择集与数据详解 — 1 】 使用datum()绑定数据

    选择集和数据的关系是 D3 最重要的基础,在[入门 - 第 7 章]时进行过些许讲解,对于要掌握好 D3 是远远不够的.故此开设一个新的分类,专门讨论选择集与数据的关系,包括数据绑定的使用和工作原理, ...

  7. 【 D3.js 选择集与数据详解 — 5 】 处理模板的应用

    在[选择集与数据 - 4]一文中,介绍了一个update.enter.exit的处理模板,这个模板很常用,本文将通过一个例子来讲解其使用方法. 1. 模板 复习一下上一章提到的模板. //绑定数据后, ...

  8. 【 D3.js 选择集与数据详解 — 4 】 enter和exit的处理方法以及处理模板

    绑定数据之后,选择集分为三部分:update.enter.exit.这三部分的处理办法是什么呢?本文将讲解其处理方法,以及一个常用的处理模板. 1. enter的处理方法 如果没有足够的元素,那么处理 ...

  9. 【 D3.js 选择集与数据详解 — 3 】 绑定数据的顺序

    data() 函数有两个参数,第一个是被绑定数据,第二个参数用于指定绑定的顺序.在数据需要更新的时候常常会用到. 默认的情况下,data()函数是按照索引号依次绑定数组各项的.第0个元素绑定数组的第0 ...

随机推荐

  1. Bootstrap之Bootstrap组件

    一 文本居中 col-xx-offset-xx:水平居中 center-block:使用于不涉及float标签的水平居中,也不涉及列的居中,让哪里居中就写到哪里,本质是:margin:0 auto. ...

  2. VMware设置inter共享连接出现空值

    1.打开“网络和共享中心”选择“VMware Virtual Ethernet Adapter for VMnet8”网卡右键属性,选择VMware Bridge Protocol,同时设置ip自动获 ...

  3. GK888CN与Devexpress报表打印标签

    安装海鸥驱动,貌似打几张也会报错 使用打印机自带的gk888t驱动,用gk888t(EPL)打带二纬码时会报错 需要选择Togther, xrLable 运行 CanShrink

  4. javascript 根据 两点 经纬度 测出距离

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. Web墨卡托坐标与WGS84坐标互转

    原文地址:http://bbs.esrichina-bj.cn/ESRI/thread-78245-1-1.html 在WebGIS的开发中经常用到的地图投影为Web墨卡托和WGS84,故歌地图,bi ...

  6. wget批量下载http文件

    eg:http://hgdownload.soe.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeAwgDnaseUniform/ 下载该路径下的所有文件 wge ...

  7. python之深浅copy

    深浅copy 1.赋值运算 a = [1, 2, 3] b = a a.append(666) print(b) #output:[1, 2, 3, 666] 对于赋值运算来说,a与b指向的是同一个内 ...

  8. spring ioc beanfactory 关系图

    spring security类关系图 mybatis-spring源码解析类关系图 Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析 转: sprin ...

  9. Java Applet小应用

    开发和部署方式     嵌入到HTML网页中,用<Applet></Applet>标签识别.java环境用浏览器的,在第一次打开时下载,可开发成以后打开,默认不必再次下载.也可 ...

  10. spring mvc使用ModelAndView时发生No request handling method with name '方法 名' in class [类名]的错误

    我日,下午关于标题错误查了好久,网上啥说法都有, 后来发现是ModelAndView的路径引错了 正确路径应该为: import org.springframework.web.servlet.Mod ...