Provides accessor functions for convenience in D3 programming

Usage no npm install needed!

<script type="module">
  import accessor from '';



Here's a thing you have to do a lot when using D3 data joins:

// Here, you provide a function to that gets an id from a datum so that D3 
// can correctly identify a corresponding element to update.
var thingElements = rootSelectAll('.leaf').data(
  things, function getId(thing) { return; }
// Here, you provide a function get gets a label from a datum so that D3 
// can set the text for each element.
thingElements.text(function getLabel(thing) { return thing.label; });

While those accessor functions aren't hard to write, it's easier to just use something that makes them for you, like this:

var thingElements = rootSelectAll('.leaf').data(data, accessor());

If you want to write accessors that traverse a path in an object to get properties, do this:

thingElements.text(accessor({ path: 'data/meta/label'));

That will make it look for an object named data, then look for an object named meta in that, then look for a property named label within that. If you need to traverse arrays you can use array indexes in the path, e.g. data/list/3/label.


npm install accessor


var accessor = require('accessor');

Accessor takes an argument, property, and returns a function that takes an object and returns that If you provide no argument property will default to id.


var accessor = require('accessor');
rootSelectAll('.leaf').data(things, accessor('foo'));

You can specify a second argument, a default value. The accessor will return the default value if the property you're accessing is undefined on the object. (It will never cache accessors that have a default value, BTW.)

If you just want the identity function (x => x), you can use accessor('identity'). An inline x => x definition may actually be fine for your case; accessor('identity') just creates fewer copies of that function than that.


Run tests with make test.