网页前端后台技巧(CSS+HTML)让前端飞web前端技术分享

javascript常用方法之数组对象计算每个属性的平均值(有值

2022-02-19  本文已影响0人  阿巳交不起水电费

计算对象中某些属性的平均值,注意:这里不是单纯的所有对应项加起来再除以arr.length,这里是除以的对应有值项的个数,在我的项目中计算原燃料成分的平均值时多个地方有用到。
避免大家重复造轮子,这里分享给大家。

/**
 *  计算数组对象平均值 【注意:这里计算的是每行中“有数据”的“属性”的均值】
 *  @arr 是要计算的数组对象
 *  @fixed 保留小数位数
 *  return 计算均值后的对象 eg:[{a:'1',b:'',c:'12'},{a:'2',b:'0',c:'3'},{a:'',b:'2',c:'3'}] => {a: "1.500", b: "1.000", c: "6.000"}
 * */
var averageCal = function (arr, fixed = 3) {
  let dataobj = {}
  arr.map((obj) => {
    Object.keys(obj).map(item => {
      dataobj[item] || (dataobj[item] = [])
      if (obj[item] !== undefined && obj[item] !== null && obj[item] !== '' && !isNaN(obj[item])) { // 有值且为数字
        dataobj[item].push(+obj[item])
      }
    })
  })
  Object.keys(dataobj).map(item => {
    if(dataobj[item] && dataobj[item].length){
       dataobj[item] = (dataobj[item].reduce((a, b) => a + b,0) / dataobj[item].length).toFixed(fixed)
    }else{
     dataobj[item] = ''
    }
  })

  return dataobj
}
// eg:
averageCal([{a:'1',b:'',c:'12'},{a:'2',b:'0',c:'3'},{a:'',b:'2',c:'3'}])

eg:


image.png
上一篇下一篇

猜你喜欢

热点阅读