평균 구하기 reduce

lim1313·2021년 7월 23일
0

프로그래머스

문제3. 평균 구하기

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

제한 조건
arr은 길이 1 이상, 100 이하인 배열입니다.
arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.


내 풀이

function average(array){
  var sum = 0;
  for (var i=0; i<array.length; i++) {
    sum += array[i];
  }
  return sum/array.length;
}

내 풀이 과정

1. for문을 통해 array 인자를 한번씩 더해준다.

다른 사람 풀이

function average(array){
  return array.reduce((a, b) => a + b) / array.length;
}
  • arr.reduce

reduce를 이렇게 사용하다니....
reduce는 알고는 있었지만, 공부했을 때 사용 방법을 정확히 이해하지 못했었다.
이번 기회에 확실히 알고 가겠다.


학습 내용 정리

reduce

배열.reduce((누적값, 현재값, 인덱스, 요소) => { return 결과 }, 초깃값);

초깃값이 없는 경우는 arr의 첫번째 인자가 초기 누적값이 된다.

초깃값 설정시 초기 누적값은 두번째 인자인 초깃값이 된다.

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

let arr = [1,2,3,4]
average(arr)

두번째 인자가 설정되어 있지 않기 때문에, 초기 (a, b) ==== (1,2)이다.

function solution(arr) {
  return arr.reduce((a,b) => {
    a.push(b % 2 ? 'odd' : 'even') 
    return a
  },[]) /* 초기 a = []
}

let testArr = [1,2,3,4]
solution(testArr)

/*결과 값*/
(1) []
(2) ["odd"]
(3) ["odd", "even"]
(4) ["odd", "even", "odd"]
(5) ["odd", "even", "odd", "even"]

reduce 활용 나이별 그룹핑

let people = [
  {name: 'aaa', age: 20},
  {name: 'bbb', age: 21},
  {name: 'ccc', age: 22},
  {name: 'eee', age: 20},
]

function groupBy(arr, property){
  return arr.reduce((acc,obj) =>{
    let key = obj[property]
    if(!acc[key]){
      acc[key] = []
    }
    acc[key].push(obj)
    return acc
  }, {})
}

let groupByAge = groupBy(people,'age')

console.log(groupByAge);

//{20: Array(2), 21: Array(1), 22: Array(1)}

reduce 활용 카운팅

let age = [20, 11, 25, 11, 30, 25, 22]

let countAge = age.reduce((acc, age) => {
  if(age in acc){
    acc[age]++
  } else {
    acc[age] = 1
  }
  return acc
}, {})

console.log(countAge);

// {11: 2, 20: 1, 22: 1, 25: 2, 30: 1}

다양한 reduce 활용 (참고)
https://jo-c.tistory.com/54

profile
start coding

0개의 댓글