2016-12-24 15 views
3

d3jsでnest()を使用してPain Indexによる昆虫のグループをグループ化しましたが、プロパティにアクセスできません。 SOにはsimilar questionがありますが、私はプロパティ名と値の代わりにundefinedを得続けます。D3でネストされたデータセットのキー値を取得するにはどうすればいいですか

var eachPain = d3.values(data_group).map(function(d){console.log(d.values); return d.values.Insect})

:これは私が扱っていたデータである: d.valuesはあなたPainIndex主催の配列を与えるが、これは私のコンソールで undefinedを出力しますので、私はこのような何かが働くだろうと思った

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" 

InsectまたはPainIndexのいずれかのプロパティにアクセスする方法を知りたいと思っています。任意のヘルプは非常に感謝しています

答えて

3

valuesは配列です。最初のインスタンスが必要なように見えます。これを試してみてください:

var eachPain = d3.values(data_group).map(function(d){ return d.values[0].Insect }); 

EDIT:

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

だけ受け入れ答えに1以外にも、いくつかのより多くの情報を追加する:あなたは、特定の昆虫を取得したい場合は

、そしてあなたの場合配列内の位置を知っているように見えますが、これは必要なものです:

var someInsect = data_group[i].values[j].insect; 
     //outer object ----^   ^---- inner object 

ariable、インデックス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>

、その変数は、あなたが望む昆虫に応じて変化します。

もう1つの可能性は、あなたが名前で欲しい昆虫の痛みレベルを取得していることです。

myInsectあなたは filterに使用します昆虫の名前を保持している
var filtered = [].concat.apply([], data_group.map(function(d) { 
    return d.values 
})).filter(function(d) { 
    return d.insect === myInsect 
})[0].painIndex; 

:あなたのネストされた配列では、それがで行うことができます。

チェック我々はタランチュラの鷹の痛み値取得この他のデモ、:もちろん

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>

、このすべてを(キーの値を取得し、値が依存取得他の値など)は、オリジナルの配列をネストされたものの代わりに使用すると簡単になります。

関連する問題