你如何检索嵌套数据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})

我很想知道如何访问InsectPainIndex属性。任何帮助非常明显

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(', '); 
}); 
+0

是否有可能找到每个数组中的所有实例? – st4rgut

+1

@ st4rgut查看我的编辑。我认为这就是你的意思/想要的。 – Jack

我想补充一些更多的信息,除了一个在公认的答案:

如果你想获得一个特定的昆虫,如果你知道它在阵列中的位置(就像你似乎这样做),这就是你需要的:

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>

当然,这一切(拿到钥匙值,获得取决于值其他值等)将会更容易,如果你使用原始数组,而不是嵌套的数组。