일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다중서명계약
- goerli
- next.js
- methoidID
- 블록체인
- Goerlifaucet
- HTMLFormElement
- 코딩테스트
- CA불러오기
- 스마트컨트랙트
- 해쉬테이블
- next-connect
- webpack
- wallet
- ts-loader
- @debug
- 자료구조
- scss
- incentive
- JavaScript
- Blockchain
- set-cookie
- keccak256
- Sass
- Codestates
- S3
- 자바스크립트
- geth
- currentTarget
- TypeScript
- Today
- Total
Minwook’s portfolio
고차함수(map, forEach, filter, reduce) 본문
고차함수란?
- 함수를 인자로 전달받거나 함수를 결과로 반환하는 함수
1. map()
배열내부를 돌면서 콜백함수를 실행시켜주는 새로운 배열을 반환하는 매서드입니다.
let arr = [1,2,3,4];
let arrx2 = arr.map(el => el*2);
console.log(arrx2); //[2, 4, 6, 8]
2. forEach()
forEach 또한 map과 동일하게 배열내부를 돌면서 각 인자에 2를 곱하는 콜백함수를 실행시켜줍니다.
map과 비교해서 어떤 점이 다를까요?
같은 코드를 매서드만 바꿔보겠습니다.
let arr= [1,2,3,4];
let arrx2 = arr.forEach(el => el*2);
console.log(arrx2); //undefined
이와같이 콘솔로 찍어보면 undefined가 출력됩니다.
이는 forEach가 배열을 리턴하지 않기 때문입니다.
forEach를 사용해서 위 코드를 구현하려면 어떻게 해야 할까요?
이번에는 arrx2를 빈배열로 선언하고 콜백함수로 2를 곱하고 빈배열에 넣어주도록 하겠습니다.
let arr = [1,2,3,4];
let arrx2 = [];
arr.forEach(el => arrx2.push(el*2));
console.log(arrx2); //[2, 4, 6, 8]
이제 콘솔을 찍어보면 원하는 결과가 출력되는 것을 볼 수 있습니다.
3. filter()
배열내부를 순회하며 callback함수를 실행하고, 조건에 맞는 요소만을 갖는 배열을 반환합니다.
let userList =[ //배열을 선언
{name: 'Mike', age: 30},
{name: 'Tom', age: 10},
{name: 'Jane', age: 27},
{name: 'Sue', age: 26},
{name: 'Harry', age: 43},
{name: 'Steve', age: 60}
];
let filetred = userList.filter((el) => el.name.length === 3); //이름이 3글자인 사람만 필터링
console.log(filetred); //[{name: 'Tom', age: 11}, {name: 'Sue', age: 26}]
4. reduce()
배열의 모든 요소들에 대해서 각각 연산을 수행하여 하나의 결과 값을 반환하는 매서드 입니다.
간단하게 배열의 모든 합을 구하는 코드를 작성해도록 하겠습니다.
let arr = [1,2,3,4,5];
const result = arr.reduce((prev, cur) => prev + cur, 0);
//prev: 누적계산값, cur: 현재값, 초기값 0
console.log(result); //15
prev는 누적값이므로 reduce함수를 사용할때는 초기값을 지정해줄 필요가 있습니다.
prev에 콘솔을 찍어본다면 reduce함수가 어떻게 실행되는지 직접 눈으로 확인 할 수 있습니다.
let arr = [1,2,3,4,5];
const reduce1 =arr.reduce((prev, cur) => {
console.log(prev)
return prev + cur
}, 0) //초기값 0
// 0
// 1
// 3
// 6
// 10
// 15 <- 최종결과
let arr = [1,2,3,4,5];
const reduce2 =arr.reduce((prev, cur) => {
console.log(prev)
return prev + cur
}, 1) //초기값 1
// 1
// 2
// 4
// 7
// 11
// 16 <- 최종결과
이와같이 초기값부터 계산되는 것을 볼 수 있습니다.
reduce 계산식 이외에도 사용할 수 있습니다.
위 filter을 이용한 코드를 reduce를 사용하여 같은 결과값을 콘솔로 출력해보겠습니다.
let userList =[
{name: 'Mike', age: 30},
{name: 'Tom', age: 10},
{name: 'Jane', age: 27},
{name: 'Sue', age: 26},
{name: 'Harry', age: 43},
{name: 'Steve', age: 60}
];
let filtered = userList.reduce((prev, cur) => {
const name = cur.name;
const age = cur.age;
if(name.length === 3){
prev.push({name, age});
}
return prev;
}, []) //초기값을 빈배열
console.log(filtered); //[{name: 'Tom', age: 10}, {name: 'Sue', age: 26}]
참고
'Today I Learned > JavaScript' 카테고리의 다른 글
코딩테스트 문제풀이 옹알이(1) 풀이 (0) | 2023.01.03 |
---|---|
중첩 반복문으로 피라미드 만들기 (0) | 2022.09.03 |