데이터 분석을 위해 reduce 메소드 사용하기

  • Array.prototype.reduce() 또는 간단히 reduce() 는 JavaScript의 모든 배열 작업 중 가장 일반적인 것입니다. reduce 방법을 사용하면 거의 모든 배열 처리 문제를 해결할 수 있습니다.
  • reduce 방법은 보다 일반적인 형태의 배열 처리를 허용하며 filtermap 모두 reduce 의 특수 응용 프로그램으로 파생될 수 있음을 보여줄 수 있습니다. reduce 메서드는 배열의 각 항목을 반복하고 단일 값(즉, 문자열, 숫자, 개체, 배열)을 반환합니다. 이것은 각 반복에서 호출되는 콜백 함수를 통해 달성됩니다.
  • 다음은 reduce 배열에서 users를 사용하여 모든 사용자의 연령 합계를 반환하는 예입니다. 단순화를 위해 이 예제에서는 첫 번째 및 두 번째 인수만 사용합니다.

  • const users = [
      { name: 'John', age: 34 },
      { name: 'Amy', age: 20 },
      { name: 'camperCat', age: 10 }
    ];
    
    const sumOfAges = users.reduce((sum, user) => sum + user.age, 0);
    console.log(sumOfAges);
    


  • 콘솔에 64 값이 표시됩니다.
  • 좋습니다. 그러면 변수watchList는 여러 영화에 대한 정보가 있는 개체 배열을 보유합니다. reduce를 사용하여 Christopher Nolan가 감독한 영화의 평균 IMDB 등급을 알아보겠습니다. 이전 과제에서 데이터를 어떻게filter, 데이터를 통해map 필요한 것을 가져오는지 상기하십시오. 다른 변수를 생성하고 getRating 함수에서 평균 등급을 반환해야 할 수도 있습니다. 등급 값은 객체에 문자열로 저장되며 수학 연산에 사용하기 전에 숫자로 변환해야 합니다.

  • 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"
      }
    ];
    
    function getRating(watchList){
      // Only change code below this line
      var averageRating;
    
      // Only change code above this line
      return averageRating;
    }
    console.log(getRating(watchList));
    


  • 답변:

  • function getRating(watchList){
      let nolanMovies = watchList.filter(movie => {
        if (movie.Director === "Christopher Nolan") return movie;
      });
    
      let nolanMovieRatingSum = nolanMovies.reduce((sum, movie) => {
        sum += parseFloat(movie.imdbRating)
        return sum;
      }, 0);
    
      let averageRating = nolanMovieRatingSum / nolanMovies.length;
    
      return averageRating;
    }
    console.log(getRating(watchList));
    


  • getRating(watchList)는 8.675입니다.

  • Larson, Quincy, 편집자. "데이터를 분석하기 위해 reduce 방법을 사용하십시오."Https://Www.freecodecamp.org/ , 중부 학급, 2014, twitter.com/ossia.

    좋은 웹페이지 즐겨찾기