nest
d3.nest
d3.nest表示一种嵌套结构。之所以成为嵌套是因为可以指定多个key访问器,这些访问器是一层一层嵌套的。
作用
将数组中的元素对象,按照key方法指定的属性,分组为层次结构。与SQL中的GROUP BY操作类似.。嵌套后的叶节点都可以根据值进行排序而非叶节点可以通过key进行排序。
作用对象
对象数组
例如对于以下的列表数据:
var yields = [
{yield: 27.00, variety: "aa", year: 1931, site: "University Farm"},
{yield: 48.87, variety: "aa", year: 1931, site: "Waseca"},
{yield: 27.43, variety: "bb", year: 1931, site: "Morris"},
{yield: 27.43, variety: "aa", year: 1934, site: "Morris"},
{yield: 27.43, variety: "aa", year: 1934, site: "Morris"},
{yield: 27.43, variety: "aa", year: 1935, site: "Morris"},
{yield: 27.43, variety: "bb", year: 1935, site: "Morris"}
];
依次根据year属性和variety属性对列表进行分组:
var entries = d3.nest()
.key(function(d) { return d.year; })
.key(function(d) { return d.variety; })
.entries(yields);
然后返回分组后的层级结构数据,输出的数组中的每个元素都是key-value对(使用了entries方法):

方法集合
# d3.nest() <>
创建一个嵌套结构操作,并且keys为空。
# nest.key(key) <>
注册一个新的key,key方法将在输入数据的每个元素上调用,并且返回一个字符串标识以便归组重构。key方法就是一个访问器,可以添加多个key方法,每次添加之后都将key方法追加到内部keys数组末尾。
多个key就组成了一种嵌套结构,如上面的.key(function(d) { return d.year; })和.key(function(d) { return d.variety; })表示先按照year属性进行分组,然后在year内部再按照variety进行分组。
# nest.sortKeys(comparator) <>
为key方法指定排序规则,对属性值进行排序,如果没有指定排序规则则返回当前的排序规则,即数据的本身的顺序,默认为undefined。如果要根据上述例子中的year属性降序,varieties升序则:
var entries = d3.nest()
.key(function(d) { return d.year; }).sortKeys(d3.descending)
.key(function(d) { return d.variety; }).sortKeys(d3.ascending)
.entries(yields);
先看外部排序结果:

再看内部的排序结果:

要注意这个排序在使用 nest.entries才起作用,而由nest.map 和 nest.object 返回的数据则没有用.
# nest.sortValues(comparator) <>
根据方法名称就可以看出它是针对嵌套结构values数组进行排序。

values数组中的元素都是叶节点,因此它是对各个分组中的叶子节点进行组内排序。这个排序在使用 nest.entries才起作用,而由nest.map 和 nest.object 返回的数据则没有用。
如,对values数组采用按照yield的降序排列:
let yields = [
{yield: 27.00, variety: "aa", year: 1931, site: "University Farm"},
{yield: 48.87, variety: "bb", year: 1931, site: "Waseca"},
{yield: 27.43, variety: "cc", year: 1934, site: "Morris"},
{yield: 27.43, variety: "dd", year: 1934, site: "Morris"},
{yield: 27.43, variety: "ee", year: 1935, site: "Morris"},
{yield: 27.43, variety: "bb", year: 1935, site: "Morris"}
];
let group = d3.nest()
.key((d)=>d.year)
.sortValues(function (a, b) {
return b.yield - a.yield;
})
.entries(yields);

# nest.rollup(function) <>
为每个叶节点元素指定卷积方法。在 nest.map和nest.object返回的值将代替原叶节点的值; 而在nest.entries中, 将使用entry.value 代替 entry.values .
为指定的数组应用嵌套操作,并以map的形式返回。
为指定的数组应用嵌套操作,并以object的形式返回。
为指定的数组应用嵌套操作,并以entrie的形式返回。
nest的更多相关文章
- JSONModel 嵌套字典数组 JSONModel nest NSDictionary NSArray
JSONModel 嵌套字典数组 JSONModel nest NSDictionary NSArray
- Nest查询示例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- NEST.net Client For Elasticsearch简单应用
NEST.net Client For Elasticsearch简单应用 由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实 ...
- Elasticsearch .Net Client NEST使用说明 2.x
Elasticsearch .net client NEST使用说明 2.x Elasticsearch.Net与NEST是Elasticsearch为C#提供的一套客户端驱动,方便C#调用Elast ...
- Elasticsearch .Net Client NEST 多条件查询示例
Elasticsearch .Net Client NEST 多条件查询示例 /// <summary> /// 多条件搜索例子 /// </summary> public c ...
- Elasticsearch .Net Client NEST 索引DataSet数据
NEST 索引DataSet数据,先序列化然后转成dynamic 类型进行索引: /// <summary> /// 索引dataset /// </summary> /// ...
- nest 'for' loop.
/* nest for loop demo. Note that,'upside' triangle controls 'inner condition'. */ import kju.print.P ...
- Nest客户端的基本使用方法
通过Nuget安装好Nest的相关Dll,之后我们就可以开始了, 1.初始化Nest客户端 string indexName = "customer"; Uri uri = new ...
- NEST 中的时间单位
Time units 英文原文地址:Time units 与 Elasticsearch 交互,我们会遇到需要设定时间段的情况(例如:timeout 参数).为了指定时间段,我们可以使用一个表示时间的 ...
- NEST 中的协变
Convariant search results version 5.x NEST 直接支持返回协变结果集合.这意味着,可以将搜索结果的类型指定为一个接口或者基类,但是其真实类型仍然是接口或基类的一 ...
随机推荐
- Oracle入门第三天(下)——子查询
一.子查询 1.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 示例: ...
- 20155206 2016-2017-2 《Java程序设计》第三周学习总结
20155206 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 两个基本标准类:java.util.Scanner , java.math.BigDecim ...
- 20155322 2016-2017-2《Java程序设计》课程总结
学号 2016-2017-2<Java程序设计>课程总结 (按顺序)每周作业链接汇总 预备作业一:浅谈对师生关系的看法以及对未来学习生活的展望 预备作业二:学习娄老师<做中学> ...
- (EX)CRT总结
(EX)CRT总结 这个东西是联赛的时候搞的,早就忘了,写篇博客复习一下 中国剩余定理(crt) 给定\(a\).\(m\) \[ x\equiv a_1(mod\;m_1)\\ x\equiv a_ ...
- 搜索引擎ElasticSearch系列(五): ElasticSearch2.4.4 IK中文分词器插件安装
一:IK分词器简介 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本.最初,它是以开源 ...
- java nio通过ByteBuffer输出文件信息
1.通过ByteBuffer的get()方法每次读取一个字节转换成char类型输出. fc = new FileInputStream("src/demo20/data.txt") ...
- MySql面试题(持续更新)
1. 左连接,右连接,内连接的概念. 左连接:以左表为主,保留左表的所有数据,并且依次拿每行数据去匹配右表所有行,如果没匹配的,右边表的数据为null. 右连接:以右表为主,保留右表的所有数据,并且依 ...
- NodeJS实现同步的方法
NodeJS被打上了单线程.非阻塞.事件驱动…..等标签. 在单线程的情况下,是无法开启子线程的.经过了很久的研究,发现并没有thread函数!!!但是有时候,我们确实需要“多线程”处理事务.node ...
- 微软职位内部推荐-SW Engineer II for Windows System
微软近期Open的职位: Microsoft's Operating Systems Group delivers the operating system and core user experie ...
- 月薪45K的Python爬虫工程师告诉你爬虫应该怎么学,太详细了!
想用Python做爬虫,而你却还不会Python的话,那么这些入门基础知识必不可少.很多小伙伴,特别是在学校的学生,接触到爬虫之后就感觉这个好厉害的样子,我要学.但是却完全不知道从何开始,很迷茫,学的 ...