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

Map visit over an array of objects.
Install
Install with npm:
$ npm install --save map-visitUsage
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
dataobject - extend objects onto the
dataobject - 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 for most use cases. But if 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 lAbout
Related projects
- collection-visit: Visit a method over the items in an object, or map visit over the objects… more | homepage
- object-visit: Call a specified method on each value in the given object. | homepage
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Building docs
(This document was generated by verb-generate-readme (a verb generator), please don't edit the readme directly. Any changes to the readme must be made in .verb.md.)
To generate the readme and API documentation with verb:
$ npm install -g verb verb-generate-readme && verbRunning tests
Install dev dependencies:
$ npm install -d && npm testAuthor
Jon Schlinkert
License
Copyright © 2016, Jon Schlinkert. Released under the MIT license.
This file was generated by verb, v0.9.0, on August 05, 2016.