00001 var arrayEach = require('./_arrayEach'), 00002 baseCreate = require('./_baseCreate'), 00003 baseForOwn = require('./_baseForOwn'), 00004 baseIteratee = require('./_baseIteratee'), 00005 getPrototype = require('./_getPrototype'), 00006 isArray = require('./isArray'), 00007 isBuffer = require('./isBuffer'), 00008 isFunction = require('./isFunction'), 00009 isObject = require('./isObject'), 00010 isTypedArray = require('./isTypedArray'); 00011 00042 function transform(object, iteratee, accumulator) { 00043 var isArr = isArray(object), 00044 isArrLike = isArr || isBuffer(object) || isTypedArray(object); 00045 00046 iteratee = baseIteratee(iteratee, 4); 00047 if (accumulator == null) { 00048 var Ctor = object && object.constructor; 00049 if (isArrLike) { 00050 accumulator = isArr ? new Ctor : []; 00051 } 00052 else if (isObject(object)) { 00053 accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; 00054 } 00055 else { 00056 accumulator = {}; 00057 } 00058 } 00059 (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { 00060 return iteratee(accumulator, value, index, object); 00061 }); 00062 return accumulator; 00063 } 00064 00065 module.exports = transform;