40 lines
1.1 KiB
Java
40 lines
1.1 KiB
Java
var keys = require('../base/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
|