1var aFunction = require('./_a-function'); 2var toObject = require('./_to-object'); 3var IObject = require('./_iobject'); 4var toLength = require('./_to-length'); 5 6module.exports = function (that, callbackfn, aLen, memo, isRight) { 7 aFunction(callbackfn); 8 var O = toObject(that); 9 var self = IObject(O); 10 var length = toLength(O.length); 11 var index = isRight ? length - 1 : 0; 12 var i = isRight ? -1 : 1; 13 if (aLen < 2) for (;;) { 14 if (index in self) { 15 memo = self[index]; 16 index += i; 17 break; 18 } 19 index += i; 20 if (isRight ? index < 0 : length <= index) { 21 throw TypeError('Reduce of empty array with no initial value'); 22 } 23 } 24 for (;isRight ? index >= 0 : length > index; index += i) if (index in self) { 25 memo = callbackfn(memo, self[index], index, O); 26 } 27 return memo; 28}; 29