1234567891011121314151617181920212223242526272829303132333435363738 |
- var optimizeCb = require('./optimizeCb');
- var isArrLike = require('./isArrLike');
- var isUndef = require('./isUndef');
- var keys = require('./keys');
- exports = createReduce(1);
- exports.create = createReduce;
- function createReduce(dir) {
- return function(obj, iterator, initial, ctx) {
- iterator = optimizeCb(iterator, ctx);
- var i, len, key;
- if (isArrLike(obj)) {
- len = obj.length;
- i = dir > 0 ? 0 : len - 1;
- if (isUndef(initial)) {
- initial = obj[i];
- i += dir;
- }
- for (; i < len && i >= 0; i += dir) {
- initial = iterator(initial, obj[i], i, obj);
- }
- } else {
- var _keys = keys(obj);
- len = _keys.length;
- i = dir > 0 ? 0 : len - 1;
- if (isUndef(initial)) {
- initial = obj[_keys[i]];
- i += dir;
- }
- for (; i < len && i >= 0; i += dir) {
- key = _keys[i];
- initial = iterator(initial, obj[key], key, obj);
- }
- }
- return initial;
- };
- }
- module.exports = exports;
|