| var baseRest = require('./_baseRest'), |
| isIterateeCall = require('./_isIterateeCall'); |
| |
| /** |
| * Creates a function like `_.assign`. |
| * |
| * @private |
| * @param {Function} assigner The function to assign values. |
| * @returns {Function} Returns the new assigner function. |
| */ |
| function createAssigner(assigner) { |
| return baseRest(function(object, sources) { |
| var index = -1, |
| length = sources.length, |
| customizer = length > 1 ? sources[length - 1] : undefined, |
| guard = length > 2 ? sources[2] : undefined; |
| |
| customizer = (assigner.length > 3 && typeof customizer == 'function') |
| ? (length--, customizer) |
| : undefined; |
| |
| if (guard && isIterateeCall(sources[0], sources[1], guard)) { |
| customizer = length < 3 ? undefined : customizer; |
| length = 1; |
| } |
| object = Object(object); |
| while (++index < length) { |
| var source = sources[index]; |
| if (source) { |
| assigner(object, source, index, customizer); |
| } |
| } |
| return object; |
| }); |
| } |
| |
| module.exports = createAssigner; |