选择集的处理 : 过滤器
有时候需要根据绑定数据对某选择集的元素进行过滤,例如某公司,只对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. stacking过程

    图解stacking原理: 上半部分是用一个基础模型进行5折交叉验证,如:用XGBoost作为基础模型Model1,5折交叉验证就是先拿出四折作为training data,另外一折作为testing ...

  2. pytorch总结

    PyTorch 深度学习:60分钟快速入门 用例子学习 PyTorch 手把手教你用PyTorch从零搭建图像分类模型

  3. illustrator画梯形

    1.在空白文档上先绘制出一个长方形: 2.用鼠标点击工具箱中”自由变换“工具: 3.用鼠标指向长方形四个顶点中的任意一个,当鼠标的箭头变为相反反方向的双箭头时,再按住鼠标左键不要松手, 同时按住[sh ...

  4. sizeof新用法(c++11)

    1.概念 1)sizeof是关键字,也是运算符,用来求对象占用空间的大小,返回字节数 2)c++11允许使用作用域运算符(::)来获取类中成员的大小,以前只允许先创建一个类的对象,通过类对象访问成员得 ...

  5. Linq高级应用

    Linq的应用为我们带来了很大的方便,提高了coding效率,最近看到了一个用linq写的数独游戏算法,让我看到了Linq写的是如此优雅,耳目一新的感觉,以前没有写过这样的代码,同时也感觉到原来Lin ...

  6. Location对象的查询字符方法实现

    function getQueryStringArgs(){ /*如果location.search有则删除第一个字符,并返回删除后的字符串*/ var gs = (location.search.l ...

  7. Windows下用curl命令

    一开始自己是下载curl的可执行文件来弄的,发现中文会乱码: 按照网上的用chcp 65001后中文还是乱码,蒙逼中. 后来直接用git bash执行curl,发现git bash自带了这个命令:(可 ...

  8. 微信小程序之画布

    canvas 标签默认宽度300px.高度225px 同一页面中的 canvas-id 不可重复,如果使用一个已经出现过的 canvas-id,该 canvas 标签对应的画布将被隐藏并不再正常工作 ...

  9. 20155205 2016-2017-2 《Java程序设计》第7周学习总结

    20155205 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 只要静态方法的方法命名中参数于返回值定义相同,也可以使用静态方法来定义函数接口操作 ...

  10. 延时、输入输出接口P0~P3

    1.寄存器 为了知道延时程序是如何工作的,我们必需首先了解延时程序中出现的一些符号,就从R1开始,R1被称之为工作寄存器.什么是工作寄存器呢?让我们从现实生活中来找找答案.如果出一道数学题:123+5 ...