1. 이중고차함수?
- 이중 반복문처럼, 고차 함수 안에 고차 함수를 또 사용해서 내가 원하는 객체 안의 데이터까지 접근하여 수정하는 방법.
- 아마 원래 이름은 어떻게 표현하는지 모르겠다. 하지만 일단 나는 이렇게 부른다.
- 아래의 예시 문제를 보면 알 수 있다.
- 아래의 arr는 2차원 배열이다. 즉, 배열 안에 배열이 또 있다.
- 배열을 입력받을 때, 그 안의 2차원 배열에는 여러 가지 타입의 데이터가 있고, 그중 number 타입만 받아서 모두 더한 값을 리턴한다.
function arrayInArray(arr) {
let onlyNum = arr.map(arr => arr.filter(newArr => typeof(newArr) === 'number'))
// map으로 모든 배열을 순회하면서 그 안에 타입이 number 인 데이터를 가진배열만을 얻는다.
let sumObj = onlyNum.reduce((acc, cur) => acc.concat(cur))
// 나온 배열을 모두 합쳐서 하나의 배열로 만든다.
let result = sumObj.reduce((acc, cur) => acc + cur, 0)
// 배열안의 number 을 모두 더해준다.
return result;
}
- 이처럼 map과 filter 두 가지 고차 함수를 사용하여 원하는 데이터를 얻을 수 있었다.
- 다른 경우도 있을 수 있지만, 가장 많이 같이 사용할 수 있는 것은 map과 filter이다.
갑자기 깨달았다! 어? 하고 생각해 보니 원하는 바와 같이 작동하고 있었다!
역시 console.log를 어떻게 어디서 사용하는지를 보면 이해에 도움이 많이 된다!
더 자주 사용해서 응용력을 올리자.