ut2
Version:
一个现代 JavaScript 实用工具库。[点击查看在线文档]。
30 lines (27 loc) • 1.02 kB
JavaScript
import allKeys from '../allKeys.js';
import identity from '../identity.js';
import isArrayLike from '../isArrayLike.js';
function createReduce(dir) {
function reducer(collection, iteratee, memo, initial) {
var _keys = !isArrayLike(collection) && allKeys(collection);
var len = (_keys || collection).length;
var i = dir > 0 ? 0 : len - 1;
if (!initial && len > 0) {
memo = collection[_keys ? _keys[i] : i];
i += dir;
}
while (i >= 0 && i < len) {
var currentKey = _keys ? _keys[i] : i;
memo = iteratee(memo, collection[currentKey], currentKey, collection);
i += dir;
}
return memo;
}
var reduce = function (collection, iteratee, initialValue) {
if (iteratee === void 0) { iteratee = identity; }
var initial = arguments.length >= 3;
return reducer(collection, iteratee, initialValue, initial);
};
return reduce;
}
export { createReduce as default };