d3(v5)

d3之操作数组 三 (nest)

2019-10-16  本文已影响0人  那头黑马

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

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
var nest_map=d3.nest()
            .key(function(d){return d.familyname;})
            .map(dataset);

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


p2.png
  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)

上一篇下一篇

猜你喜欢

热点阅读