1
This commit is contained in:
39
20220330_Vote/Ewide.Web.Entry/wwwroot/lib/xe-utils/reduce.js
Normal file
39
20220330_Vote/Ewide.Web.Entry/wwwroot/lib/xe-utils/reduce.js
Normal file
@@ -0,0 +1,39 @@
|
||||
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
|
||||
Reference in New Issue
Block a user