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

注册一个新的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.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);

对叶子节点(values的元素)按照yield的降序排序

# nest.rollup(function) <>

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

# nest.map(array) <>

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

# nest.object(array) <>

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

# nest.entries(array) <>

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

时间: 2024-10-12 16:29:17

nest的相关文章

NEST.net Client

NEST.net Client For Elasticsearch简单应用 由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实现时碰到了不少问题,现把整个处理过程的代码分享下,给同样摸索的人一些借鉴,同时希望有经验的大牛发现有问题的地方不吝斧正! 查询入口 webapi 的部分代码,把查询条件封装到 eJobQueryPosition 中 var param = new eJobQueryPosition         

(转)Elasticsearch .net client NEST使用说明 2.x

Elasticsearch.Net与NEST是Elasticsearch为C#提供的一套客户端驱动,方便C#调用Elasticsearch服务接口.Elasticsearch.Net是较基层的对Elasticsearch服务接口请求响应的实现,NEST是在前者基础之上进行的封装.本文是针对NEST的使用的总结. 引用 Install-Package NEST 包含以下dll NEST.dll Elasticsearch.Net.dll   Newtonsoft.Json.dll 概念 存储结构:

(转)NEST.net Client For Elasticsearch简单应用

由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实现时碰到了不少问题,现把整个处理过程的代码分享下,给同样摸索的人一些借鉴,同时希望有经验的大牛发现有问题的地方不吝斧正! 查询入口 webapi 的部分代码,把查询条件封装到 eJobQueryPosition 中 var param = new eJobQueryPosition            {                IndustryPost = ind

ElasticSearch NEST笔记

1. 什么是ElasticSearch? ElasticSearch is a powerful open source search and analytics engine that makes data easy to explore. 可以简单理解成索引加检索的工具,当然它功能多于此.ElasticSearch分为服务端与客户端,服务端提供REST API,客户端使用REST API. 2.怎么安装Elastic? 安装JDK(下载地址) 安装ElasticSearch(下载地址) 解压

Elasticsearch(八)【NEST高级客户端--Mapping映射】

要使用NEST与Elasticsearch进行交互,我们需要能够将我们的解决方案中的POCO类型映射到存储在Elasticsearch中的反向索引中的JSON文档和字段.本节介绍NEST中可用的所有不同功能,使POCO和Elasticsearch变得轻而易举. 在Elasticsearch中显式映射文档对于为给定的问题域提供定制搜索解决方案至关重要.虽然Elasticsearch能够基于遇到的该类型的第一个文档来推断索引中给定类型的映射,但推测的映射有时不足以构建一个非常优秀的搜索体验. 要显式

[NEST simulator] NEST example network计划

还未对nest基本语法做介绍,就直接来到了example部分,以后会陆续把语法部分补上. 本文主要介绍下我的nest example network plan. 按下列思路开展对example的学习: goal 1.找到对目标有借鉴意义的example(Preferred example)goal 2.深入理解以上examplegola 3.初步建立若干实验性NG(neural group),理解实验结果,尝试理解NG的特性,如能发现FNG(functional neural group)最好

Elastic Search 5.x Nest Multiple Queries C#

I'm using C# with those nuget packeges; <package id="Elasticsearch.Net" version="5.2.0" targetFramework="net462" /> <package id="NEST" version="5.2.0" targetFramework="net462" /> <

ElasticSearch.net NEST批量创建修改删除索引完整示例

本示例采用Elasticsearch+Nest 网上查了很多资料,发现用C#调用Elasticsearch搜索引擎的功能代码很分散,功能不完整,多半是非常简单的操作,没有成型的应用示例.比如新增或修改索引,都是发起一个request新增或修改一条数据,当一次性修改几千条数据时,发起的requst请求过多容易导致429 Too Many Request的错误,单个新增修改索引就非常不适用.其实Nest有批量新增.修改索引的功能,批量删除也可以.现将项目中采用Elasticsearch的C#代码分享

Elasticsearch NEST – Examples for mapping between Query and C#

Elasticsearch NEST – Examples for mapping between Query and C# During my training with Elasticsearch I would like to map a query with GET/POST method to C# syntax of NEST. It's very helpful for me to see how NEST composes its internal queries and sen