123456789101112131415161718192021222324252627282930313233343536373839 |
- var keys = require('./keys')
- /**
- * 接收一个函数作为累加器,数组中的每个值(从左到右)开始合并,最终为一个值。
- *
- * @param {Array} array 数组
- * @param {Function} callback 方法
- * @param {Object} initialValue 初始值
- * @return {Number}
- */
- function reduce (array, callback, initialValue) {
- if (array) {
- var len, reduceMethod
- var index = 0
- var context = null
- var previous = initialValue
- var isInitialVal = arguments.length > 2
- var keyList = keys(array)
- if (array.length && array.reduce) {
- reduceMethod = function () {
- return callback.apply(context, arguments)
- }
- if (isInitialVal) {
- return array.reduce(reduceMethod, previous)
- }
- return array.reduce(reduceMethod)
- }
- if (isInitialVal) {
- index = 1
- previous = array[keyList[0]]
- }
- for (len = keyList.length; index < len; index++) {
- previous = callback.call(context, previous, array[keyList[index]], index, array)
- }
- return previous
- }
- }
- module.exports = reduce
|