2016-04-18 47 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」]'。 –