평균 및/또는 모드를 계산하는 우아한 방법

소개



codecademy.com 챌린지의 일부로 'Calculate Mean and Mode'라는 코드 챌린지를 발견했습니다. 문제 설명을 읽는 동안에는 매우 간단해 보였지만 시작하면서 많은 질문이 제기되었습니다. 그 결과, 도전을 통해 작업한 경험을 공유하기 위해 이 블로그를 만들었습니다.

도전



숫자 목록을 받아 평균과 모드가 포함된 목록을 순서대로 반환하는 statsFinder() 함수를 만듭니다. 참고로 평균은 값의 평균이고 최빈값은 가장 많이 발생하는 값입니다. 모드가 여러 개인 경우 먼저 발생하는 모드를 반환합니다. 함수를 작성하고 이러한 답을 처음부터 찾으십시오. 가져온 도구를 사용하지 마십시오!
예: statsFinder([500, 400, 400, 375, 300, 350, 325, 300]) should return [368.75, 400]

해결책




초심자, 중급자, 전문가 등 다양한 방법으로 이 챌린지에 접근할 수 있습니다. 중요한 것은 다음과 같은 기본 원칙을 준수하여 접근하는 것입니다(자유롭게 추가할 수 있음).
  • 코드 생성 감소
  • 이해하기 쉬워야 합니다.
  • 필요에 따라 '한 줄' 또는 '여러 줄' 주석을 삽입합니다.

  • 나의 접근



    문제를 해결하려고 할 때 나는 내 직감을 99.99% 믿는다. 도전을 보았을 때 실제로 두 가지 사실을 깨달았습니다.
  • 배열의 합
  • 중복 항목을 찾아 첫 번째 항목을 인쇄(길이에 관계 없음)

  • 해결 방법



    내 초기 생각은 for ... loop를 사용하는 것이었지만 어레이 방법을 사용하여 짧은 시간에 해결할 수 있다는 것을 깨달았습니다. 따라서 .filter().reduce()

    해결책



    다음은 내가 권장하는 솔루션입니다.

    function statsFinder(array) {
      // Check array length return error statement
      if (array.length === 0) return `Input error: argument is empty`
      // Arrow function to derive the sum of all values in the array
      const avgArray = (total, val) => total + val
    
      /*
        Below lines of code calculates mean 
        by dividing the result of .reduce() method 
        while mode arrow function to find duplicates
        using .filter() method
      */
      const mean = array.reduce(avgArray) / array.length 
      const mode = array.filter((val, index) => array.indexOf(val) !== index)
      return [mean, mode[0]]
    }
    


    시도 해봐:

    console.log(statsFinder([500, 400, 400, 375, 300, 350, 325, 300])) // [378.5, 400]
    console.log(statsFinder([]))
    


    유용한 링크
  • .필터() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
  • .reduce() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

  • 도전
    https://www.codecademy.com/code-challenges/code-challenge-calculate-the-mean-and-mode-javascript

    코드를 사용해 보세요: https://codepen.io/istealersn-dev/pen/wvjJxRX

    좋은 웹페이지 즐겨찾기