정수를 담고 있는 배열 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;
}
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"]
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)}
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