Why doesn't this solution work?

Tell us what’s happening:
I got the correct answer of 8.675 but for some reason I cant pass all the tests. The watchList variable should not change passes as true; however, Your code should return the correct output after modifying the watchList object fails.

I also declared another variable called mappedList to make sure watchList doesn’t change.

I don’t know if I missed something but can someone help point me in the right direction. Thank you!

Your code so far


// The global variable
var watchList = [
  {
    "Title": "Inception",
    "Year": "2010",
    "Rated": "PG-13",
    "Released": "16 Jul 2010",
    "Runtime": "148 min",
    "Genre": "Action, Adventure, Crime",
    "Director": "Christopher Nolan",
    "Writer": "Christopher Nolan",
    "Actors": "Leonardo DiCaprio, Joseph Gordon-Levitt, Elliot Page, Tom Hardy",
    "Plot": "A thief, who steals corporate secrets through use of dream-sharing technology, is given the inverse task of planting an idea into the mind of a CEO.",
    "Language": "English, Japanese, French",
    "Country": "USA, UK",
    "Awards": "Won 4 Oscars. Another 143 wins & 198 nominations.",
    "Poster": "http://ia.media-imdb.com/images/M/MV5BMjAxMzY3NjcxNF5BMl5BanBnXkFtZTcwNTI5OTM0Mw@@._V1_SX300.jpg",
    "Metascore": "74",
    "imdbRating": "8.8",
    "imdbVotes": "1,446,708",
    "imdbID": "tt1375666",
    "Type": "movie",
    "Response": "True"
  },
  {
    "Title": "Interstellar",
    "Year": "2014",
    "Rated": "PG-13",
    "Released": "07 Nov 2014",
    "Runtime": "169 min",
    "Genre": "Adventure, Drama, Sci-Fi",
    "Director": "Christopher Nolan",
    "Writer": "Jonathan Nolan, Christopher Nolan",
    "Actors": "Ellen Burstyn, Matthew McConaughey, Mackenzie Foy, John Lithgow",
    "Plot": "A team of explorers travel through a wormhole in space in an attempt to ensure humanity's survival.",
    "Language": "English",
    "Country": "USA, UK",
    "Awards": "Won 1 Oscar. Another 39 wins & 132 nominations.",
    "Poster": "http://ia.media-imdb.com/images/M/MV5BMjIxNTU4MzY4MF5BMl5BanBnXkFtZTgwMzM4ODI3MjE@._V1_SX300.jpg",
    "Metascore": "74",
    "imdbRating": "8.6",
    "imdbVotes": "910,366",
    "imdbID": "tt0816692",
    "Type": "movie",
    "Response": "True"
  },
  {
    "Title": "The Dark Knight",
    "Year": "2008",
    "Rated": "PG-13",
    "Released": "18 Jul 2008",
    "Runtime": "152 min",
    "Genre": "Action, Adventure, Crime",
    "Director": "Christopher Nolan",
    "Writer": "Jonathan Nolan (screenplay), Christopher Nolan (screenplay), Christopher Nolan (story), David S. Goyer (story), Bob Kane (characters)",
    "Actors": "Christian Bale, Heath Ledger, Aaron Eckhart, Michael Caine",
    "Plot": "When the menace known as the Joker wreaks havoc and chaos on the people of Gotham, the caped crusader must come to terms with one of the greatest psychological tests of his ability to fight injustice.",
    "Language": "English, Mandarin",
    "Country": "USA, UK",
    "Awards": "Won 2 Oscars. Another 146 wins & 142 nominations.",
    "Poster": "http://ia.media-imdb.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_SX300.jpg",
    "Metascore": "82",
    "imdbRating": "9.0",
    "imdbVotes": "1,652,832",
    "imdbID": "tt0468569",
    "Type": "movie",
    "Response": "True"
  },
  {
    "Title": "Batman Begins",
    "Year": "2005",
    "Rated": "PG-13",
    "Released": "15 Jun 2005",
    "Runtime": "140 min",
    "Genre": "Action, Adventure",
    "Director": "Christopher Nolan",
    "Writer": "Bob Kane (characters), David S. Goyer (story), Christopher Nolan (screenplay), David S. Goyer (screenplay)",
    "Actors": "Christian Bale, Michael Caine, Liam Neeson, Katie Holmes",
    "Plot": "After training with his mentor, Batman begins his fight to free crime-ridden Gotham City from the corruption that Scarecrow and the League of Shadows have cast upon it.",
    "Language": "English, Urdu, Mandarin",
    "Country": "USA, UK",
    "Awards": "Nominated for 1 Oscar. Another 15 wins & 66 nominations.",
    "Poster": "http://ia.media-imdb.com/images/M/MV5BNTM3OTc0MzM2OV5BMl5BanBnXkFtZTYwNzUwMTI3._V1_SX300.jpg",
    "Metascore": "70",
    "imdbRating": "8.3",
    "imdbVotes": "972,584",
    "imdbID": "tt0372784",
    "Type": "movie",
    "Response": "True"
  },
  {
    "Title": "Avatar",
    "Year": "2009",
    "Rated": "PG-13",
    "Released": "18 Dec 2009",
    "Runtime": "162 min",
    "Genre": "Action, Adventure, Fantasy",
    "Director": "James Cameron",
    "Writer": "James Cameron",
    "Actors": "Sam Worthington, Zoe Saldana, Sigourney Weaver, Stephen Lang",
    "Plot": "A paraplegic marine dispatched to the moon Pandora on a unique mission becomes torn between following his orders and protecting the world he feels is his home.",
    "Language": "English, Spanish",
    "Country": "USA, UK",
    "Awards": "Won 3 Oscars. Another 80 wins & 121 nominations.",
    "Poster": "http://ia.media-imdb.com/images/M/MV5BMTYwOTEwNjAzMl5BMl5BanBnXkFtZTcwODc5MTUwMw@@._V1_SX300.jpg",
    "Metascore": "83",
    "imdbRating": "7.9",
    "imdbVotes": "876,575",
    "imdbID": "tt0499549",
    "Type": "movie",
    "Response": "True"
  }
];


  // Only change code below this line
  let mappedList = watchList.map(function(movie){
    movie.rating = movie["imdbRating"];
    if(movie["Director"] === "Christopher Nolan"){
      return parseFloat(movie.rating);
    } return 0;
  })
  
  console.log(mappedList); // returns [ 8.8, 8.6, 9, 8.3, 0 ]
  function getRating(watchList){
    let length = mappedList.length-1;
  var averageRating = mappedList.reduce(function(acc,ratings){
 return (acc+ratings);
    
  }); return averageRating/length; // returns 8.675
  }

  // Only change code above this line
  //return averageRating;
  //console.log(watchList)

console.log(getRating(watchList));

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36.

Challenge: Use the reduce Method to Analyze Data

Link to the challenge:

You are supposed to calculate the average of all movies directed by Christopher Nolan and nothing else.
In your code however you are calculating the average of all movies, if those not directed by Nolan were actually directed by Nolan with a rating of 0.

1 Like

you hard coded it to work for only a list of certain length.

you don’t know how many zeros will be in there, a better solution would be to not push those 0’s at all, so you better filter the array looking only for movies directed by Christopher Nolan .

1 Like

Thank you for all the replies. I will try using filter and see if that helps.

I tried this and still experienced a similar problem of the last check not passing even though the answer returns 8.675.

Your code here:

var filteredList = watchList.filter(function(movie){
  if(movie["Director"] === "Christopher Nolan"){
    return movie;
  }
})
//console.log(filteredList);
function getRating(){
var mappedList = filteredList.map(function(movie){
  movie.rating = movie["imdbRating"];
  return parseFloat(movie.rating);
})
console.log(mappedList);//returns [ 8.8, 8.6, 9, 8.3 ]
console.log(mappedList.length);//returns 4

let result = mappedList.reduce(function(acc,ratings){
 return (acc+ratings)})
 console.log(result);//returns 34.7
 console.log(mappedList.length);//returns 4
 return result/mappedList.length;
}

console.log(getRating(watchList));

I looked at solution 1 which is similar so I tried copying the reduce formula from the solution in another attempt(not shown here) and I am still failing the fourth check yet the result is still 8.675.

I also tried to not assign the length to a variable but instead I used the length from mappedList which seemed to be the problem before but still isn’t working.

You have a tangle of scope issues.

Your code:

Original code:

function getRating(watchList){
  // Only change code below this line
  var averageRating;


  // Only change code above this line
  return averageRating;
}

You should receive a watchList as a function argument and only use the function argument in your logic. DO NOT reference or use global variables.

You are preprocessing the global variable and storing it to another global variable and using those global variables inside of your function. That’s making a mess in your logic.

1 Like

Ok that makes sense. I will try writing it out again, Thank you!

1 Like

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.