NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/xe-utils/methods/array/reduce.js
2023-09-14 14:47:11 +08:00

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