2016-12-24 139 views
3
設置的鍵值

我用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屬性。任何幫助非常明顯

回答

3

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

1

我想補充一些更多的信息,除了一個在公認的答案:

如果你想獲得一個特定的昆蟲,如果你知道它在陣列中的位置(就像你似乎這樣做),這就是你需要的:

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>

當然,這一切(拿到鑰匙值,獲得取決於值其他值等)將會更容易,如果你使用原始數組,而不是嵌套的數組。