Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- new Promise()
- react-beautiful-dnd
- range 함수 직접 만들기
- 리액트 고차컴포넌트
- compose 함수
- 리엑트 검색 기능 구현하기
- 순수함수
- 자바스크립트로 하는 자료 구조와 알고리즘
- JavaScript
- react 배열 재정렬하기
- 리액트 dragdrap
- debound
- 자바스크립트 reduce 함수 직접 만들어보기
- 노드교과서
- next seo
- 프로미스
- 코어자바스트립트
- 검색 자동완성
- 넥스트 검색엔진최적화
- 러닝리액트
- search input
- 프로미스 직접 구현하기
- 자바스크립트로 달력만들기
- react search input
- 리액트 이미지 미리보기
- 올리브영 발색비교 기능구현하기
- 초집합
- 자바스크립트 검색 구현하기
- 자바스크립트
- 유저접근제한
Archives
- Today
- Total
미주알고주알
[Javascript] reduce 함수 직접 만들어보기 본문
JavaScript의 `reduce` 함수는 배열의 모든 요소를 하나의 값으로 줄이는(reduce) 함수다. `reduce` 함수는 콜백 함수를 사용해 배열 요소를 하나의 값으로 줄여 반환합니다.
mdn에서 다음과 같이 reduce 함수의 구문을 보여준다.
array.reduce(callback[, initialValue]);
배열 요소 처리 함수 `callback`,
초기값(선택) `intialValue`
그리고 이 callback은 인자에 순서대로 `acc(누적값)`, `cur(현재 요소)`, `idx(인덱스)`를 갖는다.
요런 특징을 가진 `reduce` 함수를 배열의 prototype 메소드가 아닌 일반 함수로 만들어보자.
const reduce = (arr, f, initialValue) => {
if (!Array.isArray(arr)) return initialValue;
let i = 0;
let ret = initialValue ?? ((i += 1), arr[0]);
for (; i < arr.length; i += 1) {
ret = f(ret, arr[i], i);
}
return ret;
};
이런 `reduce` 함수를 단순히 합계 계산하는 것에만 사용하지 않고, `compose`와 같이 함수 배열을 `reduce`해 순차적인 함수 실행을 보장할 수 있다. 예를 들어, 햄버거를 만든다면 패티를 굽고, 구워진 패티 위에 치즈를 올리고(acc), 치즈 위에 양상추를 올리고(acc), 그 위에 빵을 올려(acc) 최종 햄버거를 완성하는 것처럼 말이다.
어떤 함수의 결과를 다음 함수의 인자로 연쇄적으로 넣어야 할 때, `reduce` 함수를 적용해볼 수 있다.
const compose = (initialValue) => (...fns) => {
return fns.reduce((acc, fn) => fn(acc) , [initialValue])
}
'Javascript' 카테고리의 다른 글
[Javascript] 배열 뒤집기 (0) | 2023.03.29 |
---|---|
[React.js] 리액트로 검색 filter 및 highlight 기능 구현하기(+ debounce, throttle) (0) | 2023.03.28 |
[Javascript] range 함수 직접 만들어보기 (0) | 2023.03.24 |
[Javascript] new Set 객체 활용하기(교집합, 합집합, 차집합, 초집합) (0) | 2023.03.24 |
[Javascript] iterator을 활용해 지하철 노선도 만들기 (1) | 2023.03.24 |