如何解决如何在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。