d3之操作数组 三 (nest)

d3之操作数组 一 (统计,检索,变换)
d3之操作数组 二 (map与set)
嵌套(nest)允许将数组中的元素分组为分层树结构;可以将其像SQL中的GROUP BY运算符一样,除了可以进行多个级别的分组,并且结果输出是树而不是平面表。树中的级别由key functions指定。树的叶节点可以按值排序,而内部节点可以按键排序。可选的汇总功能将使用摘要功能折叠每个叶节点中的元素。嵌套运算符(嵌套返回的对象)是可重用的,并且不保留对嵌套数据的任何引用。

  • nest.entries()返回一个键值对的数组
var dataset=[
     {familyname:"化妆品",categoryname:"护肤",productname:"化妆水",price:100,quantity:300},
     {familyname:"化妆品",categoryname:"护肤",productname:"BB霜",price:500,quantity:20},
     {familyname:"电器",categoryname:"家电",productname:"冰箱",price:3200,quantity:300},
     {familyname:"电器",categoryname:"家电",productname:"洗衣机",price:2100,quantity:20}
 ];
var nest_entries=d3.nest()
        .key(function(d){return d.familyname;})
        .rollup(function(leaves){
            return d3.max(leaves,function(d){
                return d.quantity;
            });
        })
        .entries(dataset);

首先会将dataset 以familyname为类别进行分组:

{
        "化妆品":{
            "护肤":[
                {name:"化妆水",price:100,quantity:300},
                {name:"BB霜",price:3230,quantity:20}
            ]
        },
        "电器":{
            "家电":[
                {name:"冰箱",price:2100,quantity:300},
                {name:"洗衣机",price:3230,quantity:20}
            ]
        }
    };

然后rollup方法,会找每个familyname(化妆品,电器)下的叶子节点quantity最大的值,无疑是300.所以以上的结果如下:


p1.png
  • nest.map()返回$key,value的大的对象
var nest_map=d3.nest()
            .key(function(d){return d.familyname;})
            .map(dataset);

这个就跟上节的map方法一样,返回一个$key,value数组的大的对象:


p2.png
  • nest.object()返回一个对象
  1. 一层分类
var nest_object=d3.nest()
            .key(function(d){return d.familyname;})
            .rollup(function(leaves){
                return d3.sum(leaves,function(d){
                    return d.quantity;
                });
            })
            .object(dataset);
    console.log(nest_object);
p3.png
  1. 两层嵌套分类
var nest_object2=d3.nest()
            .key(function(d){return d.familyname;})
            .key(function(d){return d.productname;})
            .rollup(function(leaves){
                return d3.sum(leaves,function(d){
                    return d.quantity;
                });
            })
            .object(dataset);
    console.log(nest_object2);
p4.png

d3之操作数组 一 (统计,检索,变换)
d3之操作数组 二 (map与set)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 9,712评论 0 16
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,805评论 1 32
  • d3 (核心部分)选择集d3.select - 从当前文档中选择一系列元素。d3.selectAll - 从当前文...
    谢大见阅读 8,783评论 1 4
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 5,958评论 0 13
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,124评论 0 3