如何从对象数组中获得平均值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从对象数组中获得平均值相关的知识,希望对你有一定的参考价值。
下面我重现我的代码来计算食物的平均评级。
3 + 4 + 5 + 2/4应等于3.5。但这不能给我正确的输出。我的代码出了什么问题?
const ratings = [
{food:3},
{food:4},
{food:5},
{food:2}
];
let food = 0;
ratings.forEach((obj,index)=>{
food = (food + obj.food)/++index
})
console.log("FOOD",food)
任何帮助!
提前致谢!
答案
尽管有几个答案,我想补充我的重点,以提高代码质量:
- 您可以在
forEach()
中使用destructuring来获取对象的food
属性,因为它只是您感兴趣的属性。 - 尽管内部循环分开,但在循环完成后我们只能进行一次除法运算。当数组很大(数千个对象)时,这可以节省大量的计算
- 你可以在循环中使用像
+=
这样的简写来总结价值。 - 您可以在
forEach()
中创建单行代码
const ratings = [
{food:3},
{food:4},
{food:5},
{food:2}
];
let foodTotal = 0;
let length = ratings.length;
ratings.forEach(({food})=> foodTotal += food);
console.log("FOOD",foodTotal/length);
另一答案
你可以使用reduce来求和,然后简单地除以等级的长度
const ratings = [
{food:3},
{food:4},
{food:5},
{food:2}
];
const avg = ratings.reduce((a, {food}) => a + food, 0) / ratings.length;
console.log(avg);
另一答案
将它们相加后,需要除以元素数
const ratings = [
{food:3},
{food:4},
{food:5},
{food:2}
];
let food = 0;
ratings.forEach((obj,index)=>{
food = (food + obj.food)
});
food = food / ratings.length;
console.log("FOOD",food)
另一答案
您需要添加每种食物平均值的相对贡献。
因为平均值是 - 你的情况下的项目总数/项目数量
(3+4+5+2) / 4
我们可以拆分
3/4 + 4/4 + 5/4 + 2/4
const ratings = [{"food":3},{"food":4},{"food":5},{"food":2}];
let food = 0;
ratings.forEach((obj) => {
food = food + obj.food / ratings.length;
})
console.log("FOOD", food)
另一答案
这是另一个使用.reduce()的解决方案
const ratings = [
{food: 3},
{food: 4},
{food: 5},
{food: 2}
]
const average = ratings.reduce((a, b) => {
return {food: a.food + b.food}
}).food / ratings.length
console.log('FOOD', average)
另一答案
你在做什么的是3/1 + 4/2 + 5/3 + 2/4
,它不等同于3/4 + 4/4 + 5/4 + 2/4
。你能做的是
ratings.forEach((obj,index)=>{
food = (food + obj.food)
});
food = food / ratings.length;
console.log("FOOD",food)
如果你采用功能性方式做事,那么我会使用reduce函数来获得结果。
const food = ratings.reduce((sum, { food }) => sum + food, 0) / ratings.length;
console.log("FOOD", food)
以上是关于如何从对象数组中获得平均值的主要内容,如果未能解决你的问题,请参考以下文章