徐总多门店
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.1 KiB

5 months ago
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