38 lines
		
	
	
		
			967 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			38 lines
		
	
	
		
			967 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | var util = require('util'); | ||
|  | var visit = require('object-visit'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Map `visit` over an array of objects. | ||
|  |  * | ||
|  |  * @param  {Object} `collection` The context in which to invoke `method` | ||
|  |  * @param  {String} `method` Name of the method to call on `collection` | ||
|  |  * @param  {Object} `arr` Array of objects. | ||
|  |  */ | ||
|  | 
 | ||
|  | module.exports = function mapVisit(collection, method, val) { | ||
|  |   if (isObject(val)) { | ||
|  |     return visit.apply(null, arguments); | ||
|  |   } | ||
|  | 
 | ||
|  |   if (!Array.isArray(val)) { | ||
|  |     throw new TypeError('expected an array: ' + util.inspect(val)); | ||
|  |   } | ||
|  | 
 | ||
|  |   var args = [].slice.call(arguments, 3); | ||
|  | 
 | ||
|  |   for (var i = 0; i < val.length; i++) { | ||
|  |     var ele = val[i]; | ||
|  |     if (isObject(ele)) { | ||
|  |       visit.apply(null, [collection, method, ele].concat(args)); | ||
|  |     } else { | ||
|  |       collection[method].apply(collection, [ele].concat(args)); | ||
|  |     } | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | function isObject(val) { | ||
|  |   return val && (typeof val === 'function' || (!Array.isArray(val) && typeof val === 'object')); | ||
|  | } |