# It Will Average Out explainer

The aim of this puzzle: Complete the `averageRating()` function definition so that it returns the average rating for a list of hotels. Then find the average rating for Hoptropolis hotels.

Walkthrough of the solution: The `average()` and `getRatings()` functions that you created in the previous puzzles are imported so that you can use them here.

The `averageRating()` function definition will take a list of reviews stored in `hotelList`. Then it uses the `getRatings()` function to get an array of just the ratings of those hotels and stores it in `ratings`. To calculate the average of the `ratings`, you can use your `average()` function. Instead of returning 0, the function should return `average(ratings)`.

The `hoptropolisHotels` variable is storing an array of all the hotels in Hoptropolis. To get the average rating, you can use `averageRating(hoptropolisHotels)`. In order to see the output of that call, you need to use a `console.log()`. That whole command should go at the bottom of your code.

Sample code solution:
(Tap below to reveal)

``````import { getData, findHotels } from 'grasshopper.reviews';
import { average, getRatings } from 'myFunctions';

function averageRating(hotelList) {
let ratings = getRatings(hotelList);
return average(ratings);
}

let grasslandHotels = getData('Grassland', findHotels);
console.log('Average Grassland hotel rating:');
console.log(averageRating(grasslandHotels));

let hoptropolisHotels = getData('Hoptropolis', findHotels);
console.log('Average Hoptropolis hotel rating:');
console.log(averageRating(hoptropolisHotels));
``````

JavaScript Concepts: Callback Functions, Calling Functions, Code Block (function), `import`
Additional Code (hidden code that runs before the puzzleâs code):

``````let _hotelReviews = [
{
city: 'Hopalot',
price: 138,
rating: 4.0
},
{
city: 'Hopalot',
price: 78,
rating: 3.8
},
{
city: 'Hoptropolis',
price: 86,
rating: 2.4
},
{
city: 'Hoptropolis',
price: 126,
rating: 4.4
},
{
city: 'Grassland',
price: 138,
rating: 3.0
},
{
city: 'Grassland',
price: 245,
rating: 4.6
},
{
type: 'The Grassy Suites',
city: 'Hopalot',
price: 189,
rating: 4.4
},
{
type: 'The Grassy Suites',
city: 'Hopalot',
price: 111,
rating: 2.4
},
{
type: 'The Grassy Suites',
city: 'Hoptropolis',
price: 171,
rating: 2.8
},
{
type: 'The Grassy Suites',
city: 'Hoptropolis',
price: 191,
rating: 2.8
},
{
type: 'The Grassy Suites',
city: 'Grassland',
price: 265,
rating: 4.1
},
{
type: 'The Grassy Suites',
city: 'Grassland',
price: 186,
rating: 3.5
},
{
type: 'Hopton Inn',
city: 'Hopalot',
price: 160,
rating: 2.4
},
{
type: 'Hopton Inn',
city: 'Hoptropolis',
price: 226,
rating: 4.5
},
{
type: 'Hopton Inn',
city: 'Hoptropolis',
price: 192,
rating: 3.5
},
{
type: 'Hopton Inn',
city: 'Grassland',
price: 149,
rating: 4.9
}
];

const getData = (city, afunction) => {
afunction(city.trim().charAt(0).toUpperCase() + city.trim().toLowerCase().slice(1));
};

const findHotels = city => {
_hotelReviews.filter( review => review.city === city);
};

const average = array => {
array.reduce((a, b) => a + b) / array.length
};

const getRatings = hotelList => {
hotelList.map(hotel => hotel.rating)
};
``````
5 Likes

I have placed the soloution the puzzle asks for in the code correctly. I even revealed the soloution just to check my work. Do you know what is wrong?

1 Like

Hey there, it looks like your `averageRating()` function is returning `0`, instead of returning `average(ratings)`. Changing that line of code should solve the puzzle.

Hope this helps!
Ben

5 Likes

Hi,
I canât figure out this puzzle âIt will Average Outâ
Need help. Spend a couple hours trying to solve it.

Hey there, take a look at the solution code posted at the top of this thread. If thatâs not helpful, try posting a screenshot of your code and I can take a look.

Ben

Iâve complete the puzzle âIt will average outâ and my code shows it is the same as what its supposed to look like but it wonât let me continue.

2 Likes

I have the same problem. There seems to be a bug in this example. My solution output matches, and the code matches the example solution above but it still doesnât accept the answer.

1 Like

Hey there, post a screenshot of your code and Iâll take a look.

Ben

2 Likes
1 Like

Hey there, try changing your return statement in the function to just `return average(ratings)`.

2 Likes

I have no idea weâre to put console. Log

1 Like

Look at the structure of the Grassland let & console.logs and use that same structure for Hoptropolis.

Hey there, on the last line, change `console.log(getRatings(hoptropolisHotels))` to `console.log(averageRating(hoptropolisHotels))`

Hope this helps!
Ben

1 Like

It so easy just see in deep

2 Likes

This looks right. What am I missing?

You wrote âhoptropolisHotelsâ as a string in the last console.log. You should not use a string but the grey âhoptropolisHotelsâ provided by the app where you select the different codes.

would u mind looking at my coding
I dont know whats wrong with it

1 Like

In the return statement remove hoptropolisHotels.

Can someone see what I did wrong, or if there is a bug in the level?

1 Like