下面我重现我的代码来计算食物的平均评级。
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)
您也可以使用Array.reduce()
来缩短代码:
const ratings = [{"food":3},{"food":4},{"food":5},{"food":2}];
const food = ratings.reduce((r, { food }) =>
r + food
, 0) / 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)