var aFunction = require('./_a-function') | |
, toObject = require('./_to-object') | |
, IObject = require('./_iobject') | |
, toLength = require('./_to-length'); | |
module.exports = function(that, callbackfn, aLen, memo, isRight){ | |
aFunction(callbackfn); | |
var O = toObject(that) | |
, self = IObject(O) | |
, length = toLength(O.length) | |
, index = isRight ? length - 1 : 0 | |
, i = isRight ? -1 : 1; | |
if(aLen < 2)for(;;){ | |
if(index in self){ | |
memo = self[index]; | |
index += i; | |
break; | |
} | |
index += i; | |
if(isRight ? index < 0 : length <= index){ | |
throw TypeError('Reduce of empty array with no initial value'); | |
} | |
} | |
for(;isRight ? index >= 0 : length > index; index += i)if(index in self){ | |
memo = callbackfn(memo, self[index], index, O); | |
} | |
return memo; | |
}; |