UNPKG

ut2

Version:

一个现代 JavaScript 实用工具库。[点击查看在线文档]。

32 lines (28 loc) 1.04 kB
'use strict'; var allKeys = require('../allKeys.js'); var identity = require('../identity.js'); var isArrayLike = require('../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; } module.exports = createReduce;