JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 10293718
  • Score
    100M100P100Q268619F
  • License MIT

Map `visit` over an array of objects.

Package Exports

  • map-visit

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (map-visit) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

map-visit NPM version

Map visit over an array of objects.

Install

Install with npm

$ npm i map-visit --save

Usage

var mapVisit = require('map-visit');

Assign or Merge vs. Visit

Let's say you want to add a set method to your application that will:

  • set key-value pairs on a data object
  • extend objects onto the data object
  • extend arrays of objects onto the data object

Example using extend

Here is one way to accomplish this using Lo-Dash's extend:

var _ = require('lodash');

var obj = {
  data: {},
  set: function (key, value) {
    if (Array.isArray(key)) {
      _.extend.apply(_, [obj.data].concat(key));
    } else if (typeof key === 'object') {
      _.extend(obj.data, key);
    } else {
      obj.data[key] = value;
    }
  }
};

obj.set('a', 'a');
obj.set([{b: 'b'}, {c: 'c'}]);
obj.set({d: {e: 'f'}});

console.log(obj.data);
//=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }}

The above approach works fine, let's say you also want to emit an event each time a property is added to the data object. A better approach would be to use visit.

Example using visit

In this approach, when an array is passed to set, mapVisit calls set on each object in the array. When an object is passed, visit calls set on each property in the object. As a result, the data event will be emitted every time a property is added to data.

var mapVisit = require('map-visit');
var visit = require('object-visit');

var obj = {
  data: {},
  set: function (key, value) {
    if (Array.isArray(key)) {
      mapVisit(obj, 'set', key);
    } else if (typeof key === 'object') {
      visit(obj, 'set', key);
    } else {
      // some event-emitter
      console.log('emit', key, value);
      obj.data[key] = value;
    }
  }
};

obj.set('a', 'a');
obj.set([{b: 'b'}, {c: 'c'}]);
obj.set({d: {e: 'f'}});
obj.set({g: 'h', i: 'j', k: 'l'});

console.log(obj.data);
//=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }, g: 'h', i: 'j', k: 'l'}

// events would look something like:
// emit a a
// emit b b
// emit c c
// emit d { e: 'f' }
// emit g h
// emit i j
// emit k l
  • assign-deep: Deeply assign the enumerable properties of source objects to a destination object.
  • extend-shallow: Extend an object with the properties of additional objects. node.js/javascript util.
  • get-value: Use property paths ( a.b.c) to get a nested value from an object.
  • has-value: Returns true if a value exists, false if empty. Works with deeply nested values using… more
  • object-visit: Call the given method on each value in the given object.
  • set-value: Create nested values and any intermediaries using dot notation ('a.b.c') paths.

Running tests

Install dev dependencies:

$ npm i -d && npm test

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue

Author

Jon Schlinkert

License

Copyright © 2015 Jon Schlinkert Released under the MIT license.


This file was generated by verb-cli on July 04, 2015.