我需要计算类似亚马逊网站上5星评级的分数。我已经进行了足够的搜索,以找到最佳算法,但是我没有得到一个正确的答案。举个例子,如果这些是评分:
5 star - 252
4 star - 124
3 star - 40
2 star - 29
1 star - 33
共收到 478 条评论。
亚马逊计算出此产品的评分为“5 分制中的 4.1 分”。有人能告诉我这个数字是怎么算出来的吗?我只是简单地求平均数,但得不到这样的结果。
我需要计算类似亚马逊网站上5星评级的分数。我已经进行了足够的搜索,以找到最佳算法,但是我没有得到一个正确的答案。举个例子,如果这些是评分:
5 star - 252
4 star - 124
3 star - 40
2 star - 29
1 star - 33
共收到 478 条评论。
亚马逊计算出此产品的评分为“5 分制中的 4.1 分”。有人能告诉我这个数字是怎么算出来的吗?我只是简单地求平均数,但得不到这样的结果。
var yourRatingData =[{
review_id:1,
customer_id:5,
customer_name:"Faysal",
rating:5,
review_content:"I like this product it's cool and best in quality"
},
{
review_id:2,
customer_id:6,
customer_name:"Adams",
rating:4,
review_content:"It's quality product though price a bit high"
},
{
review_id:3,
customer_id:8,
customer_name:"Jane",
rating:3,
review_content:"I like but should improve quality"
},
{
review_id:4,
customer_id:9,
customer_name:"Julia",
rating:1,
review_content:"It's not good"
}];
Rating Calculation
let _5star = yourRatingData.filter(r=>r.rating==5).length;
let _4star = yourRatingData.filter(r=>r.rating==4).length;
let _3star = yourRatingData.filter(r=>r.rating==3).length;
let _2star = yourRatingData.filter(r=>r.rating==2).length;
let _1star = yourRatingData.filter(r=>r.rating==1).length;
//Sum of individual star.
let sumOfRating = parseInt( _5star + _4star + _3star + _2star + _1star );
//Total number of rating
let overallRating = parseInt( 5*_5star + 4*_4star + 3*_3star + 2*_2star +1*_1star );
//Average of all rating
let averageRating = parseFloat(overallRating/sumOfRating);
//Percentage of each star rating
let _5starPercentage = parseInt((_5star/totalRating)*100);
let _4starPercentage = parseInt((_4star/totalRating)*100);
let _3starPercentage = parseInt((_3star/totalRating)*100);
let _2starPercentage = parseInt((_2star/totalRating)*100);
let _1starPercentage = parseInt((_1star/totalRating)*100);
我认为这很有帮助。
(总星数 / 评论人数 * 5 ) * 5
= 答案
在js中保留1位小数。
answer.toFixed(1);
例子,5个人的总评价是20颗星。我使用这种方法来计算评分,它完美地运作着。
let one_star = 0;
let two_star = 0;
let three_star = 0;
let four_star = 0;
let five_star = 0;
Object.values(reviews).forEach(({ rating }) => {
switch (rating) {
case 1: one_star++; break;
case 2: two_star++; break;
case 3: three_star++; break;
case 4: four_star++; break;
case 5: five_star++; break;
}
});
let sum = one_star + two_star + three_star + four_star + five_star;
let average = ((5 * five_star) + (4 * four_star) + (3 * three_star) + (2 * two_star) + (1 * one_star)) / (sum);
console.log(average);