如何从对象数组中获得平均值

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)

任何帮助!

提前致谢!

答案

尽管有几个答案,我想补充我的重点,以提高代码质量:

  1. 您可以在forEach()中使用destructuring来获取对象的food属性,因为它只是您感兴趣的属性。
  2. 尽管内部循环分开,但在循环完成后我们只能进行一次除法运算。当数组很大(数千个对象)时,这可以节省大量的计算
  3. 你可以在循环中使用像+=这样的简写来总结价值。
  4. 您可以在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)

以上是关于如何从对象数组中获得平均值的主要内容,如果未能解决你的问题,请参考以下文章

AS3:从数组中获取平均值[重复]

如何使用以下代码根据实例变量对对象数组进行升序排序

如何从片段内的列表视图打开链接网址?

如何使用 SwiftyJSON 从 JSON 对象中获取 JSON 密钥?

如何从片段中的 JSON 响应中的对象获取数据

如何从 RCNN 中裁剪分割的对象?