JS 使用reduce对数组求和、求平均值、求最大值、求标准差、求方差,使用Js计数和去重计数

1.type类型字典

let obj={
	sum: '求和',
    avg: '平均',
    max: '最大值',
    min: '最小值',
    stddev_pop: '标准差',
    var_pop: '方差',
    count: '计数',
    count_distinct: '去重计数',
}

2.定义计算方法

  summaryCount(arr, type = 'sum') {
      let first = arr[0]
      switch (type) {
        case 'sum':
          return this.getSum(arr)
        case 'avg':
          return arr.reduce((a, b) => Number(a) + Number(b)) / arr.length
        case 'max':
          return arr.reduce((prev, next) => {
            return Math.max(Number(prev), Number(next))    // Math.min(prev, next)
          }, first)
        case 'min':
          return arr.reduce((prev, next) => {
            return Math.min(Number(prev), Number(next))    // Math.min(prev, next)
          }, first)
        case 'stddev_pop':
          const n = arr.length
          const mean = arr.reduce((acc, cur) => acc + cur, 0) / n
          const diffsSquaredSum = arr.reduce((acc, cur) => acc + Math.pow(cur - mean, 2), 0)
          const variance = diffsSquaredSum / n
          const stdDev = Math.sqrt(variance)
          return stdDev
        case 'var_pop':
          // 计算平均值
          const avg = arr.reduce((sum, val) => sum + val, 0) / arr.length
          // 计算差异值的平方和
          const diffSquaredSum = arr.reduce((acc, val) => {
            const diff = val - avg
            return acc + diff * diff
          }, 0)
          // 将差异值平方和除以元素数量
          return diffSquaredSum / arr.length
        case 'count':
          return arr.length
        case 'count_distinct':
          return arr.filter((item, index, arr) => arr.indexOf(item) === index).length
        default:
          return this.getSum(arr)
      }
    },
    // 求和方法
    getSum(arr) {
      return arr.reduce((prev, curr) => {
        const value = Number(curr)
        let cellValue = ''
        if (!isNaN(value)) {
          cellValue = prev + curr
        } else {
          cellValue = prev
        }
        return cellValue
      }, 0)
    },

3.使用

this.summaryCount([1,2,3,5,8,9,9,1,2,3],'avg')
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值