首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找替换当前值后的平均值

查找替换当前值后的平均值
EN

Stack Overflow用户
提问于 2019-07-02 07:09:00
回答 1查看 62关注 0票数 0

我不确定为什么会发生这个问题,但由于某种原因,我得到了错误的输出。我想要做的是取一个现有的评分平均值,并生成一个新的评分。我目前正在解决的情况是,已经计算了平均值的用户需要更改其值。

例如:

代码语言:javascript
复制
User A rates at 5 stars
User B rates at 3 stars
User C rates at 5 star

目前的平均星数是: 13/3或4.333

现在,如果用户B更改了他们的评级,而我不想遍历所有的评级,我只想说:

假设我知道有3个评级,并且我要将用户C更改为3,那么我假设我可以这样做:

代码语言:javascript
复制
13-5 = 8
8 + 3 = 11
11/3 = new average 3.667

var originalRatingVal = originalRating.rating ? originalRating.rating.stars : 0
var currentNumberOfRatings = currentItem.count ? currentItem.count.ratings : 0

var currentAverageTotal = currentNumberOfRatings * overall_rating
var oldNumberOfRatings = currentNumberOfRatings - 1
var newAverage = (currentAverageTotal - originalRatingVal) - oldNumberOfRatings

var newRatingVal = currentRating.rating ? currentRating.rating.stars : 0
var newNumRatings = oldNumberOfRatings + 1;
var oldRatingTotal = newAverage * oldNumberOfRatings;
var newAvgRating = (oldRatingTotal + newRatingVal) / newNumRatings;

这似乎不起作用:

如果我将用户B更改为5,期望newAvgRating等于5,那么它当前等于5.666666666666667。

任何想法都将非常感谢,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-07-02 07:18:33

代码语言:javascript
复制
const ratings = [5, 3, 5];
const ratingsTotalled = ratings.reduce((a,b)=>a+b);
const originalAverage = ratingsTotalled/ratings.length;
console.log('original:', originalAverage);

//now, I want to remove a '5' rating
//and replace it with '3'

const alteredTotal = ratingsTotalled - 5 + 3;
const alteredAverage = alteredTotal/ratings.length;

console.log('altered:', alteredAverage);

换句话说:

代码语言:javascript
复制
const originalRatings = {
  a: 5,
  b: 3,
  c: 5,
}
const ratings = Object.values(originalRatings);
const ratingsTotalled = ratings.reduce((a,b)=>a+b);
const originalAverage = ratingsTotalled/ratings.length;
console.log('original:', originalAverage);

//now, I want to remove a '5' rating
//and replace it with '3'
const cAlteredRating = 3;
const alteredTotal = ratingsTotalled - originalRatings.c + cAlteredRating;
const alteredAverage = alteredTotal/ratings.length;

console.log('altered:', alteredAverage);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56843475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档