2017-08-16 50 views
1

我不知道如何通過名稱來嵌套我的數據。如何在d3上按名稱嵌套數據?

我的數據是這樣的:

var data = [ 
      [[{name: "Bonpoint"}], [ 
       {axis: "Coton", value: 1}, 
       {axis: "Laine", value: 0.8}, 
       {axis: "Cachemire", value: 0.6}, 
       {axis: "Soie", value: 0.20}, 
       {axis: "Angora", value: 0.20}, 
       {axis: "Autres", value: 0.20}, 
       {axis: "Nylon", value: 0}, 
       {axis: "Acrylique", value: 0}, 
       {axis: "Viscose", value: 0}, 
       {axis: "Polyuréthane", value: 0}, 
       {axis: "Polyester", value: 0.20}]], 

      [[{name: "Petit Bateau"}], [ 
       {axis: "Coton", value: 1}, 
       {axis: "Laine", value: 0.40}, 
       {axis: "Cachemire", value: 0}, 
       {axis: "Soie", value: 0}, 
       {axis: "Angora", value: 0}, 
       {axis: "Autres", value: 0}, 
       {axis: "Nylon", value: 0}, 
       {axis: "Acrylique", value: 0}, 
       {axis: "Viscose", value: 0}, 
       {axis: "Polyuréthane", value: 0}, 
       {axis: "Polyester", value: 0.20}]], 

       ...etc 

我想這行代碼:

var names = d3.nest() 
       .key(function (d) {return d[0].map(function (o) {return o.name})}) 
       .entries(data); 

但是當我鍵入console.log(names),我得到的是一個數組對象,而不是直接的名字。你有什麼想法,我可以直接訪問我的data中的name

謝謝。

+0

當你把'names.key'在控制檯日誌中會發生什麼? –

+0

@Ryan Morton:我有一個「未定義」的消息... – solub

+0

更仔細地看JSON對象,它已經看起來嵌套了。我想你只需要映射對象並設置key = name,second key = axis和value = value。 –

回答

1

嘗試使用object()(或map()),而不是entries()

var names = d3.nest() 
      .key(function (d) {return d[0].map(function (o) {return o.name})}) 
      .object(data); 

console.log(names.keys()) 
// => ["Bonpoint", "Petit Bateau"] 

console.log(names.Bonpoint) 
// => [[{name: "Bonpoint"}], Array] 
+0

謝謝馬克!這正是我所尋找的。 :) – solub