11484 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
Je dois calculer la moyenne des étoiles pour des commentaires de resto d'un fichier json.
Je bloque..je n'arrive pas à l'afficher..
Merci pour votre aide!
Voici mon code :
	
function moy() {
    var averageRestaurantRating = 0;
    for (i = 0; i < result[i].ratings[i].stars.length; i++) {
    averageRestaurantRating += result[i].ratings[i].stars;
	}
  averageRating = (averageRestaurantRating /i).toFixed(1)
}
	$(document).ready(function afficheResto() {	 
		 var displayResources = $('#restaurant_prelist');
		 displayResources.text('Loading data from JSON source...');
		 $.ajax({
		 type: "GET",
		 url: "resto.json",
		 success: function time(result)
		 {
		 var output="";
		 for (var i in result)
		 {
		 output+='<div id="list"><h3>'+result[i].restaurantName +'</h3><p>'+result[i].address +'</p><img src="images/resto.jpg" height="150px" width="150px"><p class="star">'+ [b]starRating(result[i].averageRating[/b])+'<p><a href="#restaurant_review" data-id="' +result[i].ratings[i].comment+ '">Voir Avis</a></p><hr></div>';
		 


[
   {
      "restaurantName":"Bronco",
      "address":"39 Rue des Petites Écuries, 75010 Paris",
      "lat":48.8737815,
      "lng":2.3501649,
      "ratings":[
         {
            "stars":4,
            "comment":"Un excellent restaurant, j'y reviendrai ! Par contre il vaut mieux aimer la viande."
         },
         {
            "stars":5,
            "comment":"Tout simplement mon restaurant préféré !"
         }
      ]
   },
   {
      "restaurantName":"Babalou",
      "address":"4 Rue Lamarck, 75018 Paris",
      "lat":48.8865035,
      "lng":2.3442197,
      "ratings":[
         {
            "stars":5,
            "comment":"Une minuscule pizzeria délicieuse cachée juste à côté du Sacré choeur !"
         },
         {
            "stars":3,
            "comment":"J'ai trouvé ça correct, sans plus"
         }
      ]
   }
]
Salut,

Oué tu t'y prend mal..... comment dire...

starRating(result[x].averageRating)
sur cette ligne, je ne comprend rien. C'est quoi starRating() ? je vois pas la fonction.
C'est quoi averageRating ? je le vois pas dans ton json. Je ne vois pas où est utilisé la fonction moy() ?

Donc à partir de là, il nous manque des éléments.

Tu fais un boucle sur tous t'es résultat (for (var i in result)). à partir de ça tu ne peux pas vraiment différencier les notes des différents réstau. Il te faut une boucle qui parcours également les notes en plus des restau.

for (var restau in result){
  // je récupe les infos du restau
   for (var note in restau[x].ratings){
       // je récupe toutes ses notes
   }
 // Si y'a des notes, je fais la moyenne de ce que j'ai récupérer dans la boucle des note.
}

Modifié par JENCAL (12 Sep 2018 - 10:31)
Salut

Pour calculé les moyennes, je préfère cette méthode :

const datas = [{
        "restaurantName": "Bronco",
        "address": "39 Rue des Petites Écuries, 75010 Paris",
        "lat": 48.8737815,
        "lng": 2.3501649,
        "ratings": [{
                "stars": 4,
                "comment": "Un excellent restaurant, j'y reviendrai ! Par contre il vaut mieux aimer la viande."
            },
            {
                "stars": 5,
                "comment": "Tout simplement mon restaurant préféré !"
            }
        ]
    },
    {
        "restaurantName": "Babalou",
        "address": "4 Rue Lamarck, 75018 Paris",
        "lat": 48.8865035,
        "lng": 2.3442197,
        "ratings": [{
                "stars": 5,
                "comment": "Une minuscule pizzeria délicieuse cachée juste à côté du Sacré choeur !"
            },
            {
                "stars": 3,
                "comment": "J'ai trouvé ça correct, sans plus"
            }
        ]
    }
];

let arRestaurants = [];

for (const obj of datas) {
    let
        restaurant = obj['restaurantName'],
        note = 0;

    for ( const rating of obj['ratings'] ){
        note += Number(rating['stars']);
    }

    note = ( note / obj['ratings'].length ).toFixed(1);

    arRestaurants.push( [ restaurant, note ]);
}

// debug, console, touche F12
console.table(arRestaurants);
console.log(arRestaurants[0][0], arRestaurants[0][1]);
console.log(arRestaurants[1][0], arRestaurants[1][1]);


EDIT
grillé par @JENCAL qui a répondu pendant que j'étais occupé à peaufiner la réponse
Modifié par danielhagnoul (12 Sep 2018 - 10:49)
Mdr, oué mais moi c'était du pseudo code, ça compte pas ! ^^ la vrai réponse est la tienne.
Modifié par JENCAL (12 Sep 2018 - 11:12)