2016-04-18 13 views
1

マップ全体で毎月のデータをアニメーション化しようとしています。毎月のデータを配列内にまとめて保存しています。データをバインドしようとすると、.data(data.January)のように動作します。しかし、.data(data.monthName)で選択された現在の月を追跡する変数を使用すると、コンソールにTypeErrorが返され、残りのアプリケーションはレンダリングされません。D3:変数を使用してバインドされた配列のオブジェクトにアクセスする

私の推測では、キーの値に誤ってアクセスしていて、d3にそれを扱うユニークな方法があります。

以下は機能しない関数です。 (スライダーコントロールが数ヶ月を変更したときupdate()が発射される。)

d3.json("data/avg_revisit.json", function(data) { 
 
color.domain([20, 0]); 
 
    function update() { 
 
     var monthName = getMonthName(currentMonth); 
 
     colored_bars.selectAll("rect") 
 
      .data(data.monthName) 
 
      .enter() 
 
      .append("rect") 
 
      .attr("width", getLandWidth()) 
 
      .attr("class", "bars") 
 
      .attr("height", function(d) { 
 
       return projection([0, d.latitude - 0.5])[1] - projection([0, d.latitude])[1]; 
 
      }) 
 
      .attr("opacity", 0.6) 
 
      .style("fill", function(d) { 
 
       //Get data value 
 
       var value = d.average_revisit; 
 

 
       if (value) { 
 
         //If value exists… 
 
         return color(value); 
 
       } else { 
 
         //If value is undefined… 
 
         return "#ccc"; 
 
       } 
 
      }) 
 
      //Define position of each rectangle by it's latitude from the data 
 
      .attr("transform", function(d) { 
 
       return "translate(" + projection([-180, d.latitude]) + ")" 
 
      }); 
 
      }

答えて

2

利用data[monthName]の代わりdata.monthNameを。変数を使用してオブジェクトのキーにアクセスする場合は、object[string variable]を使用する必要があります。

+0

ありがとうございました!それはそれを修正した。私は小さなものが私を踏み外していることを知っていた。本当にありがとう。 –

+0

あなたも大歓迎です:) –

+1

無効な名前でも動作します。たとえば、 "1st"という名前のキーがある場合、 'data.1st'を書くことはできませんが、' data ["1st"] 'と書くことができます。 –

関連する問題