Using an associative array as data for D3

Malcolm Crum picture Malcolm Crum · Mar 6, 2012 · Viewed 19.1k times · Source

I have a very simple D3 example that first reads data into an associative array, then displays it in a bar graph.

I can't seem to get anything to display using this method though. Instead, I have to insert a task in between: Read the data into an associative array, copy that data into a simple array, then display the bar graph using the simple array.

chart.selectAll("div")
     .data(genreAssociative)
     .enter().append("div")
     .style("width", function(d) { return d * 10 + "px"; })
     .text(function(d) { return d; });

The above does not work.

genreSimple = [];
for (var genre in genreAssociative) genreSimple.push(genreAssociative[genre]);         
chart.selectAll("div")
     .data(genreSimple)
     .enter().append("div")
     .style("width", function(d) { return d * 10 + "px"; })
     .text(function(d) { return d; });

The above does; using a simple array as an intermediary. Is there a special way to iterate over an associative array instead of a standard array?

Answer

Lars Kotthoff picture Lars Kotthoff · Mar 6, 2012

You can use the functions d3.values or d3.entries to work directly with associative arrays. You simply need to take it into account in the functions that set attributes (e.g. function(d) { return d.value; }).