-
const values = ['banana', 'apple', 'orange', 'orange', 'apple']; const count = values.reduce((acc, cur) => { acc[cur] = (acc[cur] || 0) + 1 return acc; }, {})
배열의
reduce()
메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환한다.리듀서 함수는 네 개의 인자를 가진다.
- 누산기 (acc)
- 현재 값 (cur)
- 현재 인덱스 (idx)
- 원본 배열 (src)
리듀서 함수의 반환 값은 누산기에 할당되고, 누산기는 순회 중 유지되므로 결국 최종 결과는 하나의 값이 된다.
구문
arr.reduce(callback[, initialValue])
const values = [1,2,3,4,5,6]; let result = values.reduce((acc, cur) => acc + cur, 0) console.log(result); //21
reduce 활용
👉 평균 구하기
const values = [1,2,3,4,5,6]; const average = values.reduce((acc, cur, i, {length}) => { return i === length - 1 ? (acc + cur) / length : acc + cur }, 0) console.log(average) //3.5
현재 순회 중인 요소가 마지막 요소(i === length - 1)이면 평균을 구하고, 그렇지 않으면 계속 누적되게 하여 배열 요소의 평균값을 구할 수 있다.
👉 최대값 구하기
const values = [1,2,3,4,5]; const max = values.reduce((acc, cur) => acc > cur ? acc : cur, 0); console.log(max) //5
누적값과 현재 순회 중인 요소와 비교하여 큰 값을 할당시켜 배열 내에서 최대값을 구할 수 있다.
(최대값을 구할 때에는
reduce()
보다는Math.max
를 사용하는 것이 더 직관적이다.)👉 요소의 중복 횟수 구하기
const values = ['banana', 'apple', 'orange', 'orange', 'apple']; const count = values.reduce((acc, cur) => { acc[cur] = (acc[cur] || 0) + 1 return acc; }, {}) conosole.log(count) //{banana : 1, apple: 2, orange: 2}
첫 번째 순회 시
acc
에는 초기값으로{}
를 할당하고, cur에는 'banana'가 할당된다. 초기값으로 전달받은 {}에 요소값인cur
을 프로퍼티 키로, 요소의 개수를 프로퍼티 값으로 할당한다. 만약, 프로퍼티 값이 undefined(처음 등장하는 요소)이면 프로퍼티 값을 1로 설정한다.👉 중복 요소 제거 하기
const values = [1, 2, 1, 3, 5, 4, 5, 3, 4, 4]; const result = values.reduce((acc, cur, i, arr) => arr.indexOf(cur) === i ? [...acc, cur] : acc, []); console.log(result) //[1,2,3,5,4]
indexOf()
가 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하는 것을 이용하여, 배열 내 중복되는 요소를 제거할 수 있다.728x90'Javascript' 카테고리의 다른 글
jQuery 문법을 javascript로 쉽게 바꾸는 사이트 (0) 2023.05.22 공공(오픈)데이터 API (0) 2023.04.02 this (2) 2022.09.10 데이터 불변성 (0) 2022.09.10 JS 프로처럼 쓰는 팁 (0) 2022.09.05 댓글