简体   繁体   中英

how to display rating based on number

I have a situation where i'm getting data from database like this

var data = [  {name:'Alpha Hotel',price:400,star:3},
              {name:'Beta Hotel',price:600,star:4},
              {name:'Gamma Hotel',price:450,star:5},
           ];

i want to display as much rating as my star

for example for this data {name:'Alpha Hotel',price:400,star:3} my rating should be 3 not 1

here is what i have tried: https://jsfiddle.net/ewL4wLvh/2/

While constructing the HTML, you need to repeat the spans as many times as of stars.
You can use this neat trick to achieve this without using loops:

htmlConstructed += '<p>Name : '+val.name+'</p>'+
    '<p>Price : '+val.price+'</p>'+
    'Rating :'+new Array(val.star + 1).join('<span><i class="fa fa-star" aria-hidden="true" style="color:#D91E18;"></i></span>')+
    '<hr/>';

Check out the updated FIDDLE

Use loop for form star markup to be appended-

Array#fill - The fill() method fills all the elements of an array from a start index to an end index with a static value.

Array#reduce - The reduce() method applies a function against an accumulator and each element in the array (from left to right) to reduce it to a single value.

 var data = [{ name: 'Alpha Hotel', price: 400, star: 3 }, { name: 'Beta Hotel', price: 600, star: 4 }, { name: 'Gamma Hotel', price: 450, star: 5 }, ]; var htmlConstructed = ''; $.each(data, function(i, val) { var starStr = Array(val.star).fill(null).reduce((a) => a + '<i class="fa fa-star" aria-hidden="true" style="color:#D91E18;"></i>', ''); htmlConstructed += '<p>Name : ' + val.name + '</p>' + '<p>Price : ' + val.price + '</p>' + 'Rating :<span>' + starStr + '</span><hr/>'; }); $('#content-area').append(htmlConstructed); 
 <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet" /> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <div id="content-area"></div> 

您可以使用条件(如果是,如果是其他,则为elf),并检查它有多少颗恒星,然后显示它有多少颗恒星。

use Array.join for times that you want repeat some element.

var data = [  {name:'Alpha Hotel',price:400,star:3},
          {name:'Beta Hotel',price:600,star:4},
          {name:'Gamma Hotel',price:450,star:5},
       ];

var htmlConstructed = '';
 $.each(data,function(i,val){        
      htmlConstructed += '<p>Name : '+val.name+'</p>'+'<p>Price : '+val.price+'</p>'+'Rating :<span>'+
      Array(val.star).join('<i class="fa fa-star" aria-hidden="true" style="color:#D91E18;"></i>')
  +'</span><hr/>';

  });

  $('#content-area').append(htmlConstructed);

you can use this simple solution.

var data = [  {name:'Alpha Hotel',price:400,star:3},
                  {name:'Beta Hotel',price:600,star:4},
                  {name:'Gamma Hotel',price:450,star:5},
               ];

        var htmlConstructed = '';
         $.each(data,function(i,val){
             // console.log(val.name);
             var rating='';
             for(var i=0;i<val.star;i++){
                    rating = rating +'<span><i class="fa fa-star" aria-hidden="true" style="color:#D91E18;"></i></span>';
             }
              htmlConstructed += '<p>Name : '+val.name+'</p>'+'<p>Price : '+val.price+'</p>'+'Rating :'+rating+'<hr/>';


     });

     $('#content-area').append(htmlConstructed);

Use this Code,

var data = [  {name:'Alpha Hotel',price:400,star:3},
              {name:'Beta Hotel',price:600,star:4},
              {name:'Gamma Hotel',price:450,star:5},
           ];

    var htmlConstructed = '';
     $.each(data,function(i,val){
         // console.log(val.name);

          htmlConstructed += '<p>Name : '+val.name+'</p>'+'<p>Price : '+val.price+'</p>'+'Rating :'+ addStar(val.star) +'<hr/>';

 });

 function addStar(rating){
 var returnString = '';
 for(var i=0;i< rating;i++ )
 returnString = returnString + '<span><i class="fa fa-star" aria-hidden="true" style="color:#D91E18;"></i></span>';

 return returnString;

 }

 $('#content-area').append(htmlConstructed);

Fiddle: https://jsfiddle.net/r83wnpqr/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM