accessor

3.0.0 • Public • Published

accessor

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 thing.id; }
);
thingElements.enter().append('option');
// 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; });
thingElements.exit().remove();

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());
thingElements.enter().append('option');
thingElements.text(accessor('label'));
thingElements.exit().remove();

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.

Installation

npm install accessor

Usage

var accessor = require('accessor');

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

e.g.

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.

Tests

Run tests with make test.

License

MIT.

Dependencies (1)

Dev Dependencies (1)

Package Sidebar

Install

npm i accessor

Weekly Downloads

6

Version

3.0.0

License

MIT

Unpacked Size

5.68 kB

Total Files

6

Last publish

Collaborators

  • jimkang