你如何检索嵌套数据D3
问题描述:
设置的键值
我用nest()
在d3js分组一堆疼痛指数的昆虫,但我有麻烦访问属性。 SO上有一个similar question,但我一直得到undefined
而不是属性名称和值。这是我处理的数据:你如何检索嵌套数据D3
Array[6]
0: Object
1: Object
2: Object
3: Object
4: Object
5: Object //expanded below
key: "4"
values: Array[3]
0: Object
Insect: "Tarantula Hawk" // I'm trying to access this object inside an object
PainIndex: "4"
我觉得像这样的工作,因为d.values
让你通过PainIndex组织了一个数组,但打印在我的控制台undefined
:
var eachPain = d3.values(data_group).map(function(d){console.log(d.values); return d.values.Insect})
我很想知道如何访问Insect
或PainIndex
属性。任何帮助非常明显
答
values
是一个数组。看起来你想要第一个例子。试试这个:
var eachPain = d3.values(data_group).map(function(d){ return d.values[0].Insect });
编辑:
var eachPain = d3.values(data_group).map(function(d) {
return d.values.map(function(v) { return v.Insect; }).join(', ');
});
答
我想补充一些更多的信息,除了一个在公认的答案:
如果你想获得一个特定的昆虫,如果你知道它在阵列中的位置(就像你似乎这样做),这就是你需要的:
var someInsect = data_group[i].values[j].insect;
//outer object ----^ ^---- inner object
在这个v易变的,索引i
是指外部物体,所有昆虫都有给定的水平疼痛。然后,在里面,索引j
指的是特定昆虫的内部物体。例如,查看下面的演示(我使用的是一个<pre>
加载数据),在那里我得到数据并按照您的方式嵌套它。在本演示中,得到狼蛛鹰,我使用的是:
var someInsect = data_group[0].values[1].insect;
var data = d3.csvParse(d3.select("#data").text());
var data_group = d3.nest()
.key(d => d.painIndex)
.entries(data);
var someInsect = data_group[0].values[1].insect;
console.log(someInsect);
pre {
display: none;
}
<script src="https://d3js.org/d3.v4.min.js"></script>
<pre id="data">insect,painIndex
fire ant,4
honey wasp,1
warrios wasp,3
paper wasp,1
velvet ant,2
tarantula hawk,4
bullet ant,4</pre>
当然,这个变量将根据你想要的昆虫改变。
另一种可能是获得任何你想要的名称的昆虫的痛苦程度。
var filtered = [].concat.apply([], data_group.map(function(d) {
return d.values
})).filter(function(d) {
return d.insect === myInsect
})[0].painIndex;
哪里myInsect
认为你会在filter
使用昆虫的名称:在您的嵌套数组,这是可以做到的。
检查这个其他演示中,我们得到的狼蛛鹰的疼痛值:
var data = d3.csvParse(d3.select("#data").text());
var data_group = d3.nest()
.key(d => d.painIndex)
.entries(data);
var myInsect = "tarantula hawk"
var filtered = [].concat.apply([], data_group.map(function(d) {
return d.values
})).filter(function(d) {
return d.insect === myInsect
})[0].painIndex;
console.log(filtered);
pre {
\t display: none;
}
<script src="https://d3js.org/d3.v4.min.js"></script>
<pre id="data">insect,painIndex
fire ant,4
honey wasp,1
warrios wasp,3
paper wasp,1
velvet ant,2
tarantula hawk,4
bullet ant,4</pre>
当然,这一切(拿到钥匙值,获得取决于值其他值等)将会更容易,如果你使用原始数组,而不是嵌套的数组。
是否有可能找到每个数组中的所有实例? – st4rgut
@ st4rgut查看我的编辑。我认为这就是你的意思/想要的。 – Jack