Big update!Introducing GitHub Bot Commands. Learn more
Log inBook a demo


Package Overview
File Explorer

Advanced tools


Map `visit` over an array of objects.


Version published
Weekly downloads
decreased by-11.46%

Weekly downloads



map-visit NPM version NPM monthly downloads NPM total downloads Linux Build Status

Map visit over an array of objects.


Install with npm:

$ npm install --save map-visit


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

What does this do?

Assign/Merge/Extend 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 (comparable to Object.assign):

var _ = require('lodash'); var obj = { data: {}, set: function (key, value) { if (Array.isArray(key)) { _.extend.apply(_, [].concat(key)); } else if (typeof key === 'object') { _.extend(, key); } else {[key] = value; } } }; obj.set('a', 'a'); obj.set([{b: 'b'}, {c: 'c'}]); obj.set({d: {e: 'f'}}); console.log(; //=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }}

The above approach works fine for most use cases. However, if you also want to emit an event each time a property is added to the data object, or you want more control over what happens as the object is extended, a better approach would be to use visit.

Example using visit

In this approach:

  • when an array is passed to set, the mapVisit library calls the set method 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 (events are just an example, you can use this approach to perform any necessary logic every time the method is called).

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 { // simulate an event-emitter console.log('emit', key, value);[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(; //=> {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



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



Building docs

(This project's is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the readme template.)

To generate the readme, run the following command:

$ npm install -g verbose/verb#dev verb-generate-readme && verb

Running tests

Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

$ npm install && npm test


Jon Schlinkert


Copyright © 2017, Jon Schlinkert. Released under the MIT License.

This file was generated by verb-generate-readme, v0.5.0, on April 09, 2017.



What is map-visit?

Map `visit` over an array of objects.

Is map-visit popular?

The npm package map-visit receives a total of 12,206,355 weekly downloads. As such, map-visit popularity was classified as popular.

Is map-visit well maintained?

We found that map-visit demonstrated a not healthy version release cadence and project activity because the last version was released a year ago.It has 2 open source maintainers collaborating on the project.

Last updated on 09 Apr 2017

Did you know?

Socket installs a Github app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.

Install Socket


Subscribe to our newsletter

Get open source security insights delivered straight into your inbox. Be the first to learn about new features and product updates.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc