pluck-deep

Pluck values of a collection given a dot separated string

Usage no npm install needed!

<script type="module">
  import pluckDeep from 'https://cdn.skypack.dev/pluck-deep';
</script>

README

pluck-deep

Build Status

Pluck values of a collection given a 'dot' separated string

module.exports = function pluckDeep(coll, selector) { ... }

Install

npm i -S pluck-deep

Usage

pluckDeep accepts an array or object as an initial argument.

You can pick a value or array of values by passing in a selector.

Selectors

For the purpose of pluckDeep a selector is a string with object value accessors separated with a .. In other words, you can retrieve a value just like you would on any object, except that these selectors will automatically map an array of values for you.

// Example selectors
'planet.earth.size'; // returns a single value set a size
'planet.saturn.moons.name'; // Will return an array of moon names

See below examples and tests for more selectors

Value plucking

var sel = 'mercury.venus';
var o = {
  mercury: {
    venus: 'earth'
  }
};

var v = pluckDeep(o, sel);
assert.equal(v, o.mercury.venus);

Array plucking

var sel = 'saturn.moons.name';
var o = {
  saturn: {
    moons: [{ name: 'titan' }, { name: 'enceladus' }, { name: 'rhea' }]
  }
};

var arr = pluckDeep(o, sel);
var expect = o.saturn.moons.map(prop('name'));
assert.deepEqual(arr, expect);

Filterable

Add a filterable statment to filter out return values based on some comparable

var sel = 'system.planets.name[type=dwarf]';
var o = {
  system: {
    planets: [
      {
        name: 'earth',
        type: 'ocean'
      },
      {
        name: 'pluto',
        type: 'dwarf'
      }
    ]
  }
};

var v = pluckDeep(o, sel);
assert(Array.isArray(v));
assert.equal(v.length, 1);
assert.equal(v[0], 'pluto');

// With an object
var sel = 'rings[type=gas]';
var venus = {
  type: 'gas',
  rings: false
};

var v = pluckDeep(venus, sel);
assert.equal(v, false);