我有一个对象数组。我想从2个以上的数组中获取键值对象的map(?),而不仅仅是一个。以下代码是从d3.js
开始的标准嵌套。但是,我不是让 Species 作为键,而是要让 Sepal_Length,Sepal_Width,Petal_Length,Petal_Width中的每一个成为键,并且将值设为array
的[q1,q2,q3,iqr,min,max]
sumDat = {
var sumstat = d3.nest()
.key(function(d) { return d.Species;})
.rollup(function(d) {
var q1 = d3.quantile(d.map(g => g.Sepal_Length).sort(d3.ascending),.25)
var median = d3.quantile(d.map(g => g.Sepal_Length).sort(d3.ascending),.5)
var q3 = d3.quantile(d.map(g => g.Sepal_Length).sort(d3.ascending),.75)
var iqr = q3 - q1
var min = q1 - 1.5 * iqr
var max = q3 + 1.5 * iqr
return({q1: q1, median: median, q3: q3, interQuantileRange: iqr, min: min, max: max})
})
.entries(dd1)
return sumstat
}
链接我可观察的notebook。向下滚动到sumDat
单元格。
答案 0 :(得分:2)
我假设您想要以下输出:
newsumData = Array(4) [
0: Object {
key: "Sepal_Length"
values:
Array(6) [5.1, 5.8, 6.4, 1.3000000000000007, 3.1499999999999986, 8.350000000000001]
}
1: Object {key: "Sepal_Width", values: Array(6)}
2: Object {key: "Petal_Length", values: Array(6)}
3: Object {key: "Petal_Width", values: Array(6)}
]
为此,
function calculateValues(d, key){
var q1 = d3.quantile(d.map(g => g[key]).sort(d3.ascending),.25)
var median = d3.quantile(d.map(g => g[key]).sort(d3.ascending),.5)
var q3 = d3.quantile(d.map(g => g[key]).sort(d3.ascending),.75)
var iqr = q3 - q1
var min = q1 - 1.5 * iqr
var max = q3 + 1.5 * iqr
return {key: key, values: [q1,median,q3,iqr,min,max]};
}
var dataKeys = ["Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width"]
dataKeys
数组上的映射最后计算最终数据结构,如下所示:newsumData = dataKeys.map(m => calculateValues(dd1, m));