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) <>

注册一个新的keykey方法将在输入数据的每个元素上调用,并且返回一个字符串标识以便归组重构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.mapnest.object 返回的数据则没有用.

# nest.sortValues(comparator) <>

根据方法名称就可以看出它是针对嵌套结构values数组进行排序。

values数组中的元素都是叶节点,因此它是对各个分组中的叶子节点进行组内排序。这个排序在使用 nest.entries才起作用,而由nest.mapnest.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);
对叶子节点(values的元素)按照yield的降序排序

# nest.rollup(function) <>

为每个叶节点元素指定卷积方法。在 nest.mapnest.object返回的值将代替原叶节点的值; 而在nest.entries中, 将使用entry.value 代替 entry.values .

# nest.map(array) <>

为指定的数组应用嵌套操作,并以map的形式返回。

# nest.object(array) <>

为指定的数组应用嵌套操作,并以object的形式返回。

# nest.entries(array) <>

为指定的数组应用嵌套操作,并以entrie的形式返回。

nest的更多相关文章

  1. JSONModel 嵌套字典数组 JSONModel nest NSDictionary NSArray

    JSONModel 嵌套字典数组  JSONModel nest NSDictionary NSArray

  2. Nest查询示例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. NEST.net Client For Elasticsearch简单应用

    NEST.net Client For Elasticsearch简单应用 由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实 ...

  4. Elasticsearch .Net Client NEST使用说明 2.x

    Elasticsearch .net client NEST使用说明 2.x Elasticsearch.Net与NEST是Elasticsearch为C#提供的一套客户端驱动,方便C#调用Elast ...

  5. Elasticsearch .Net Client NEST 多条件查询示例

    Elasticsearch .Net Client NEST 多条件查询示例 /// <summary> /// 多条件搜索例子 /// </summary> public c ...

  6. Elasticsearch .Net Client NEST 索引DataSet数据

    NEST 索引DataSet数据,先序列化然后转成dynamic 类型进行索引: /// <summary> /// 索引dataset /// </summary> /// ...

  7. nest 'for' loop.

    /* nest for loop demo. Note that,'upside' triangle controls 'inner condition'. */ import kju.print.P ...

  8. Nest客户端的基本使用方法

    通过Nuget安装好Nest的相关Dll,之后我们就可以开始了, 1.初始化Nest客户端 string indexName = "customer"; Uri uri = new ...

  9. NEST 中的时间单位

    Time units 英文原文地址:Time units 与 Elasticsearch 交互,我们会遇到需要设定时间段的情况(例如:timeout 参数).为了指定时间段,我们可以使用一个表示时间的 ...

  10. NEST 中的协变

    Convariant search results version 5.x NEST 直接支持返回协变结果集合.这意味着,可以将搜索结果的类型指定为一个接口或者基类,但是其真实类型仍然是接口或基类的一 ...

随机推荐

  1. 最近公共祖先 lca (施工ing)

    声明 咳咳,进入重难点的图论算法之一(敲黑板): 题目: 洛谷 P3379 先放标程,施工ing,以后补坑!!!(实在太难,一个模板这么长 [ 不过好像还是没有 AC自动机 长哎 ],注释都打半天,思 ...

  2. 20155226 2016-2017-2 《Java程序设计》第3周学习总结

    20155226 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 认识对象 类类型 Java可区分为基本类型和类类型两大类型系统,其中类类型也称为参考类型.s ...

  3. kali更新源相关 -- 没有release文件、签名无效、404

    kali更新源相关 -- 没有release文件.签名无效.404 这个随笔主要是处理Mac下使用VMare虚拟机安装Kali时候我遇到的一些关于更新源的问题 (因为本人为了这个问题折腾了四五个小时, ...

  4. 《Java 程序设计》课堂实践三

    实践题目 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和运行结果截图,加上学号水印,提交码云代码链接. 代码链接 代码链接 实践 ...

  5. bootstrap 内边框样式

    css设置: .table>tbody>tr>td, .table>tbody>tr>th, .table>tfoot>tr>td, .table ...

  6. lnmp环境搭建(centos6.9+mysql5.7+php7.1+nginx1.10)

    安装前准备:CentOS 6.9 64位 最小化安装 yum install -y make gcc gcc-c++ perl zlib-devel libaio libpng libpng-deve ...

  7. 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点,包括5个点,两个眼的中心.鼻尖.两个嘴角,以下是测试代码: int test_alignment() { std: ...

  8. 【xshell属性设置】如何修改xshell字体大小

    1.周末在家,想搞一下学习,于是远程公司的电脑(我的移动硬盘在公司,里面有虚拟机及测试环境) 发现xshell界面字体太小,不方便看,于是研究了一下如何来设置xshell 的字体大小 2.点击左上角的 ...

  9. iOS 关于在提交了APP等待审核之后,发现小Bug需要再提一个版本的说明

    昨天晚上加班到深夜终于将APP推上去,今天早上过来再测试一遍的时候,发现需要一个小调整.而此时应用的状态是正在等待审核,随手记录一下这种情况下,提交一个新版本的做法,有需要的可以参考一下. 01-进入 ...

  10. Flask开发环境搭建

    基础准备 Python 3.6.5 Conda Visual Studio Code 虚拟环境 创建虚拟环境 conda create -n flask 激活虚拟环境 activate flask 关 ...