reduce
배열의 값들을 하나의 새로운 값으로 합치는 메서드
배열.reduce((누적값, 현재값)=>{ return 새로운 누적값; }, 초기값);
덧셈의 경우,
[1, 2, 3, 4].reduce((a, c) => (a+c) , 0) //10
a는 누적값, c는 현재값이고 0은 초기값이라서 a(누적값)는 초기값이 된다.
참고로 초기값을 넣지 않으면 첫 번째 값이 초기값이 된다.
즉, a: 0, c: 1
a: 1, c: 2
a: 3, c: 3
a: 6, c: 4
값 10
이 값을 갯수대로 나누면 평균이 나오기 때문에
[1, 2, 3, 4].reduce((a, c) => (a+c) , 0) / [1, 2, 3, 4].length //2.5
위와 같이 평균을 구할 수 있다.
평균구하기
곱셈의 경우,
[1, 2, 3, 4].reduce((a, c) => (a*c) , 1) //10
즉, a: 1, c: 1
a: 1, c: 2
a: 2, c: 3
a: 6, c: 4
값 24
최솟값 구하기 예제
let minValue = data.reduce((a, b) => Math.min(a,b)); console.log(minValue); //2
배열을 객체 리터럴로 바꾸기
.reduce((a, c, i) => {a[i] =c; return a}, { })
a는 누적값, c는 현재값 그리고 i는 인덱스이다.
코드의 마지막에 { }를 붙이면 배열식으로 값이 나온다.
['철수', '영희', '현영', '한솔'].reduce((a, c, i) => { a[i] = c; return a }, { })
// {0: '철수', 1: '영희', 2: '현영', 3:'한솔'}
즉, a: { }, c: '철수', i: 1
a: {0: '철수'}, c: '영희', i: 2
a: {0: '철수', 1: '영희', 2: '현영'}, c: '한솔', i: 3
값 a: {0: '철수', 1: '영희', 2: '현영', 3: '한솔'}
문제
다음 코드의 결과값을 구해보자
[1, 2, 3, 4, 5].reduce((a, c) => {
a[c] = c*10;
return a;
}, { });
정답
{1: 10, 2: 20, 3: 30, 4: 40, 5: 50}