选择集的处理 : 过滤器
有时候需要根据绑定数据对某选择集的元素进行过滤,例如某公司,只对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. JAVA遇上HTML-----JSP 篇基本概念

    Java Web简介 1.什么是WEB应用程序: Web应用程序是一种可以通过Web访问的应用程序.Web应用程序的一个最大好处是用户很容易访问应用程序.用户只需要有浏览器即可,不需要再安装其他软件. ...

  2. sqlserver2008查询性能优化(文摘)

    第1章 sql查询性能调整 第4章 索引分析

  3. App测试基本流程详解(汇总整理)

    前言 看过许多大神对APP测试的理解,博主总结了一下我们平时测试APP应该注意的一些测试点并结合大神的理解,总结出这篇文章. 一.测试周期 测试周期一般为两周,根据项目情况以及版本质量可适当缩短或延长 ...

  4. main.cpp

    /*main.cpp * *The starting point of the network simulator *-Include all network header files *-initi ...

  5. linux复制文件并修改文件名

    #!/bin/bash #复制/casnw/backup/db203oradata/目录下的所有后缀名为dmp的文件拷贝到/casnw/backup/dbmonthbak 目录下cp -f /casn ...

  6. vue中文章的折叠于显示全部

    在以一篇文章中,可能文章特别长,但是在页面第一次显示的时候可能就只需要显示一部分,这种情况下就需要自己进行修改 基本思路 利用类名就是预先定义一个类名,设置高度,和overflow:hidden,前提 ...

  7. highcharts x轴中文刻度太长换行

    xAxis: { type: 'category', title:null, gridLineWidth: 1, lineColor: "#50ae93", labels: { s ...

  8. svn本地如何切换账号

    SVN如何切换账号   在使用svn更新或提交数据时需要输入用户名和密码,在输入框中可以选择是否记录,以便下次操作无需再次输入用户名和密码: 要切换其他用户名时,需要删除已记录用户的数据,在电脑桌面上 ...

  9. hadoop一代集群运行代码案例

    hadoop一代集群运行代码案例 集群 一个 master,两个slave,IP分别是192.168.1.2.192.168.1.3.192.168.1.4               hadoop版 ...

  10. hdu 5059 简单字符串处理

    http://acm.hdu.edu.cn/showproblem.php?pid=5059 确定输入的数是否在(a,b)内 简单字符串处理 #include <cstdio> #incl ...