JavaScript reduce로 평균 구하기

DANO PARK·2022년 4월 23일
1
post-thumbnail
post-custom-banner

Programmers JavaScript Lv.1 [평균 구하기]

문제설명

정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해라.

<script>
  function solution(arr) {
    var answer = 0;
    return answer;
  }
</script>
  • 제한사항

    • arr은 길이 1 이상, 100 이하인 배열이다.
    • arr의 원소는 -10,000 이상 10,000 이하인 정수
  • 입출력 예시

    arrreturn
    [1,2,3,4]2.5
    [5,5]5

제출 답안

<script>
  function solution(arr) {
    const answer = arr.reduce((a, b) => {
      return a + b
    }, 0) / arr.length
    return answer
  }

// => 테스트 통과!
</script>

정답 해설

길이 1 이상, 100 이하 배열인 arr의 값을 모두 합산한 값과, arr이 가진 배열의 개수를 나누면 평균을 구할 수 있다.

Array.prototype.reduce() 알아보기

reduce() 메소드는 배열의 각 요소에 대해 주어진 reducer 함수를 실행하고, 하나의 결과값을 반환한다.

예시 구문

<script>
array.reduce(function(accumulater, currentValue, currentIndex, array) {
return accumulator + currentValue;
}, initialValue);

// 또는

array.reduce((accumulater, currentValue, currentIndex, array) => {
return accumulater + currentValue;
}, initialValue);
</script>

용어 설명

reduce()는 아래의 네 가지 인수를 받아 실행합니다.

  • accumulater(acc)
    콜백(callback)에서 반환 받은 값을 누적한 값.
    콜백의 첫 번째 호출이면서 initialValue 값을 적용한 경우, accumulaterinitialValue 값을 그대로 받는다.

  • currentValue(cur)
    처리할 현재 요소.

  • currentIndex(idx)
    처리할 현재 요소의 인덱스.
    initialValue 값을 적용한 경우, 0또는 1부터 시작.

  • initialValue
    콜백의 최초 호출에서 첫 번째 인수에 제공하는 값.
    초기 값을 제공하지 않을 경우, 배열의 첫 번째 요소를 사용.
    빈 배열에서 초깃값 없이 reduce()를 호출하면 오류가 발생.

배열의 모든 값 합산하기

위의 설명을 통해 reduce()를 실행하면 배열의 모든 값을 합산한 값을 출력할 수 있다.

<script>
arr = [1,2,3,4]
arr.reduce((acc, cur, idx, arr) => {
	return acc + cur
}, 0);

// => 10
</script>

콜백은 4번 호출되며, 각 호출의 인수와 반환값은 다음과 같다.

호출acccuridxarr반환값
1번011[1, 2, 3, 4]1
2번122[1, 2, 3, 4]3
3번333[1, 2, 3, 4]6
1번644[1, 2, 3, 4]10

배열 개수 출력하기

아래의 메소드를 사용하면 배열의 개수를 출력할 수 있다.

<script>
const arr = [1, 2, 3, 4];
arr.length;

// => 4
</script>

for 구문을 활용한 답안

<script>
function solution(arr){
    
  var sum = 0;
    
  for(var i=0; i<arr.length; i++)
      sum += arr[i];
    
  return sum/arr.length;
}
</script>

끝.

profile
단오해서 단호박!
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 4월 26일

reduce라니.. 콜백이라니.. 천재🙄

답글 달기