1つの星にそれぞれ5つの評価バーがあります。データ(評価)は、0と1の間の数値の配列です。複数の評価バーの値を計算する
評価バーのパーセンテージ値を計算します。範囲は0%から100%になります。
評価バーの幅が正しく設定されておらず、平均評価が正しく計算されている場合、私は知りません。私の計算が
$(document).ready(function() {
initializeStatistics();
});
var ratings = [0.2, 0.8, 0.1, 0.9, 0.1, 0.3, 0.9, 0.1, 0.6, 1, 0.1, 0.4, 0.6, 0.8, 0.9, 0.6, 0.1];
function initializeStatistics() {
var ratingBars = $(".ratingBar"); // get all the bars
var sumRating = getSumRating(); // get the sum of all ratings
for (var i = 0; i < ratingBars.length; i++) {
setBarWidth(ratingBars[i], calculateBarWidth(i, sumRating, ratingBars.length)); // calculate the % width and set it
}
createFinalRatingBar(sumRating, ratingBars.length); // calculate the average rating from all ratings
}
function getSumRating() { // get the sum of all ratings
var sumRating = 0;
for (var i = 0; i < ratings.length; i++) {
sumRating += ratings[i];
}
return sumRating;
}
function calculateBarWidth(barIndex, sumRating, ratingBarsLength) { // calculate the % width and set it
var width = 0;
for (var i = 0; i < ratings.length; i++) {
var currentRating = ratings[i];
var isInMinRange = currentRating > (barIndex/ratingBarsLength); // the value is bigger than the value range from before
var isInMaxRange = currentRating < (barIndex + 1/ratingBarsLength); // the value is smaller than the value range coming up next
if (isInMinRange && isInMaxRange) {
width += currentRating; // add the value to the width
}
}
if (width > 0)
width = sumRating/width; // get the width in percent
return width;
}
function setBarWidth(bar, width) { // set the final width of the bar
$(bar).width(width + "%");
}
function createFinalRatingBar(sumRating, ratingBarsLength) {
var averageRating = sumRating/ratingBarsLength; // get the average rating from all ratings
for (var j = 0; j < ratingBarsLength; j++) {
var isFull = false;
if (j < averageRating) { // place a full image, if the value is smaller than the rating otherwise place an empty image
isFull = true;
}
// Create 1 RatingContainer (full or empty)
}
console.log("average rating: " + averageRating);
}
.ratingBar {
height: 30px;
}
#ratingBarOne {
background-color: #ff6f31;
}
#ratingBarTwo {
background-color: #ff9f02;
}
#ratingBarThree {
background-color: #ffcf02;
}
#ratingBarFour {
background-color: #88b131;
}
#ratingBarFive {
background-color: #99cc00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="ratingBarFive" class="ratingBar"></div>
<div id="ratingBarFour" class="ratingBar"></div>
<div id="ratingBarThree" class="ratingBar"></div>
<div id="ratingBarTwo" class="ratingBar"></div>
<div id="ratingBarOne" class="ratingBar"></div>
間違っているようです
5つ星のバーの横にある他の評価バーは、より大きな幅を持つ必要があります。
誰かが正しい計算を手伝ってくれますか?
非常に良い、良い、まあまあ、非常に、悪い悪いグーグルとアマゾン から二つの例
私は
間の評価を比較したいです
あなたは多分あなたは、複数のバーの幅をどうしようとしているものを展開することはできますか? 5つのバーが表示されますが、1つのデータセットのみが表示されます。達成しようとしている目標は何ですか? – Reed
@Reed私の質問を更新しました – peterHasemann