Javascript/method

Array.reduce()

안개바다 2023. 3. 16. 14:05

Array.reduce()

Array.reduce()는 단순 덧셈을 반복문 없이 쉽게 할 수 있게 만들 어 주는 메소드이다. 

총 4개의 값이 필요한데 간단하게 구조를 보자

원본배열.reduce((이전요소까지의합accumulator, 현재값currentValue)=>accumulator+currentValue, 초기값)

이렇게 이전 요소까지의 합(누산기, accumulator), 현재 값(currentValue), 초기 값, 원본 배열이 필요하다

사용 방법을 예로 들어 보면 <1보다 10까지 요소가 있는 배열 arr의 모든 요소의 합> 을 구하는 문제가 있다고 해보자 기존에는 반복문으로 풀었다면 

let result =0;
for(const el of arr){
	result+=el;
}
return result => 55 출력

이런 방식으로 풀었을 것이다. 동일한 예시에서 reduce를 쓴다면

const result = arr.reduce((total, now)=>total+now, 0);
return result; => 55 출력

이런식으로 나타낼 수 있다.

주의 사항으로는

첫 번째) 초기값은 지정을 안해줄 경우 원본배열의 첫 번째 값을 사용하기 때문에 빈 배열을 사용 할 경우 Type에러가 발생한다.

두 번째) 객체 배열의 덧셈에서 초기값을 지정해주지 않으면 이런 문제가 발생한다

let initialValue = 0;
let sum = [{x: 1}, {x:2}, {x:3}].reduce(function (accumulator, currentValue) {
    return accumulator + currentValue.x;
},initialValue)

console.log(sum) => 6 출력

let sum = [{x: 1}, {x:2}, {x:3}].reduce(function (accumulator, currentValue) {
    return accumulator + currentValue.x;
})

console.log(sum) => [object Object]23 출력

배열의 첫 번째 값인 {x: 1}이 함수를 통하지 않고 바로 누산기에 더해졌기에 1이 아닌 [object Object]가 더해지는 문제가 생겼다.

따라서 가능하면 초기값을 지정해주는 것이 좋다.

 

개인적으로 팀 프로젝트에서도 사용하는데 소스코드를 예시로 보면

const area = areaSorting.reduce((total, now) => total + '&code=' + addressToCode(now), '');

지역명으로 이루어진 배열을 각각의 요소를 함수를 통해 변환 후 누산기에 쿼리문으로 더해 주는 구조이다.

이렇게 reduce는 반복적인 과정을 간편하게 만들어주는 편리한 메소드이다.

'Javascript > method' 카테고리의 다른 글

Array.indexOf( ) & Array.lastIndexOf()  (0) 2023.03.31
Array.find( ) & Array.findIndex( )  (0) 2023.03.16
Array.filter()  (0) 2023.03.16
Array.map()  (0) 2023.03.11