utils
Version:
Fast, generic JavaScript/node.js utility functions.
45 lines (37 loc) • 877 B
JavaScript
;
var isPlainObject = require('../lang/isPlainObject');
var hasOwn = require('./hasOwn');
/**
* Expose `merge`
*/
module.exports = merge;
/**
* Recursively combine the properties of `o` with the
* properties of other `objects`.
*
* @name .merge
* @param {Object} `o` The target object. Pass an empty object to shallow clone.
* @param {Object} `objects`
* @return {Object}
* @api public
*/
function merge(o) {
if (!isPlainObject(o)) { return {}; }
var args = arguments;
var len = args.length - 1;
for (var i = 0; i < len; i++) {
var obj = args[i + 1];
if (isPlainObject(obj)) {
for (var key in obj) {
if (hasOwn(obj, key)) {
if (isPlainObject(obj[key])) {
o[key] = merge(o[key], obj[key]);
} else {
o[key] = obj[key];
}
}
}
}
}
return o;
}