如何在JavaScript数组中进行分组,计算总和并获得平均值?

问题描述

我有对象数组

 const users = [
     { group: 'editor',name: 'Adam',age: 23 },{ group: 'admin',name: 'John',age: 28 },{ group: 'editor',name: 'William',age: 34 },name: 'Oliver',age: 28' }
 ];

预期结果:

//sum
 sumAge = {
 editor: 57,// 23+34
 admin: 56    // 28+28
}

//average
avgAge = {
   editor: 28.5,// (23+34) / 2
   admin: 28    //(28+28)/2
}

我使用reduce()方法按“组”对数组中的对象进行分组并计算总和:

let sumAge = users.reduce((group,age) => {
    group[age.group] = (group[age.group] || 0) + age.age || 1;
    return group;
},{})
console.log('sumAge',sumAge); // sumAge: {editor: 57,admin: 56} 
done!

如何通过键“ group”对Array的对象进行分组并计算平均值? 我尝试过:

let ageAvg= users.reduce((group,age) => {
      if (!group[age.group]) {
      group[age.group] = { ...age,count: 1 }
         return group;
      }
      group[age.group].age+= age.age;
      group[age.group].count += 1;
      return group;
      },{})
const result = Object.keys(ageAvg).map(function(x){
     const item  = ageAvg[x];
     return {
         group: item.group,ageAvg: item.age/item.count,}
 })
console.log('result',result);
/*
result=[
    {group: "editor",ageAvg: 28.5}
    {group: "admin",ageAvg: 28}
]

但预期结果:

result = {
   editor: 28.5,// (23+34) / 2
   admin: 28    //(28+28)/2
}

解决方法

您可以简单地使用reduce来获得total的{​​{1}}。

并使用age groups length object.keys函数中获取新对象总数的平均值。

演示:

getAvg

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...