话不多说哦,直接上代码,复制过去调用就行
/**
* @description 计算对象数组内某一属性的的最大值,最小值,平均值, 求和, 某一属性在字段内的数量
* @param {*} array 数据源
* @param {*} field 字段名
* @param {*} type 计算方式
* @param {*} value 属性值
*/
getArrayStatistic (array, field, type, value) {
//中间数组,用来将对象数组内的指定属性,提取出来,重新建立一个数组
const midArray = []
for (let i = 0; i < array.length; i++) {
//abnormalToNormal是我的一个函数,用来过滤是否是异常值的,如果是异常值,会返回缺测,不参与计算,这个函数要根据使用者的需求自己定制
if (abnormalToNormal(array[i][field]) === '缺测') {
} else {
midArray.push(array[i][field])
}
}
switch (type) {
case 'max': // 计算某一属性下的最大值
return Math.max(...midArray)
case 'min': // 计算某一属性下的最小值
return Math.min(...midArray)
case 'valueNumber': // 计算某一个属性下的某一值的数量
var compareObj = {}
for (let i = 0; i < array.length; i++) {
if (compareObj[array[i][field]] === undefined) {
compareObj[array[i][field]] = 1
} else {
compareObj[array[i][field]] = compareObj[array[i][field]] + 1
}
}
return compareObj[value]
case 'sum': // 计算某一属性的和
var sum = 0
array.forEach(item => {
if (abnormalToNormal(Number(item[field])) === '缺测') {
} else {
sum = sum + Number(item[field])
}
})
return sum.toFixed(2)
case 'avg': // 计算某一属性的平均值
var sumValue = 0
for (let i = 0; i < midArray.length; i++) {
sumValue += Number(midArray[i])
}
return (sumValue / midArray.length).toFixed(2)
default:
console.log('未知计算参数!')
}
}