如何在JavaScript数组中进行分组,计算总和并获得平均值? [英] How to group by, calculate sum and get average in JavaScript array?

查看:213
本文介绍了如何在JavaScript数组中进行分组,计算总和并获得平均值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有对象数组

 const users = [
     { group: 'editor', name: 'Adam', age: 23 },
     { group: 'admin', name: 'John', age: 28 },
     { group: 'editor', name: 'William', age: 34 },
     { group: 'admin', 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()方法按组"对数组中的对象进行分组并计算总和:

I use reduce() method to group the objects in an array by 'group' and calulate sum:

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的对象进行分组并计算平均值? 我试过了:

How to group object of Array by key 'group' and calulate average?. I tried:

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来获取age groupstotal.

You could simply use reduce to get the total of age groups.

并使用object.keys length getAvg函数获取作为新对象的总数的平均值.

And use object.keys length to get the average of your total as new object from getAvg function.

演示:

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

const sumId = users.reduce((a, {
  group,
  age
}) => (a[group] = (a[group] || 0) + age, a), {});

console.log(sumId); //{editor: 57, admin: 56}

//Average
const getAvg = (x) => {
  const item = {}
  const count = Object.keys(x).length
  Object.keys(x).map(function(y) {
    item[y] = sumId[y] / count
  })
  return item
}
console.log(getAvg(sumId)); //{editor: 28.5, admin: 28}

这篇关于如何在JavaScript数组中进行分组,计算总和并获得平均值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆