d3之操作數(shù)組 一 (統(tǒng)計胆建,檢索严肪,變換)
d3之操作數(shù)組 二 (map與set)
嵌套(nest)允許將數(shù)組中的元素分組為分層樹結構;可以將其像SQL中的GROUP BY運算符一樣梦染,除了可以進行多個級別的分組索赏,并且結果輸出是樹而不是平面表。樹中的級別由key functions指定届搁。樹的葉節(jié)點可以按值排序缘薛,而內部節(jié)點可以按鍵排序】溃可選的匯總功能將使用摘要功能折疊每個葉節(jié)點中的元素宴胧。嵌套運算符(嵌套返回的對象)是可重用的,并且不保留對嵌套數(shù)據(jù)的任何引用表锻。
- nest.entries()返回一個鍵值對的數(shù)組
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(化妝品,電器)下的葉子節(jié)點quantity最大的值浩嫌,無疑是300.所以以上的結果如下:
- nest.map()返回$key檐迟,value的大的對象
var nest_map=d3.nest()
.key(function(d){return d.familyname;})
.map(dataset);
這個就跟上節(jié)的map方法一樣,返回一個$key,value數(shù)組的大的對象:
- nest.object()返回一個對象
- 一層分類
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);
- 兩層嵌套分類
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);
d3之操作數(shù)組 一 (統(tǒng)計码耐,檢索追迟,變換)
d3之操作數(shù)組 二 (map與set)