📝[Section2_Unit1] 고차 함수
고차 함수(higher order function)란 함수를 전달인자(argument)로 받을 수 있고, 함수를 리턴할 수 있는 함수를 말한다.
✔️ 콜백 함수(callback function) : 다른 함수(caller)의 전달인자(argument)로 전달되는 함수를 의미한다.
✔️ 커링 함수 : 함수를 리턴하는 함수를 의미한다. 커링 함수를 고안한 논리학자 하스켈 커리(Haskell Curry)의 이름을 따왔다.
조건에 맞는 데이터만 분류(filtering) 할 때 사용한다.
const foods = [
{
menu = "hamburger",
store = "Macdonald",
price = 5600
},
{
menu = "pizza",
store = "Domino"
price = 21200
},
// ... 생략
];
// store가 Macdonald 인지 확인하는 함수
const isMacdonald = function (foods) {
return foods.store === "Macdonald";
};
// Macdonald 메뉴만 모임
const MacdonaldMenu = foods.filter(isMacdonald);
하나의 데이터를 다른 데이터로 매핑(mapping) 할 때 사용한다.
// 메뉴 하나의 store를 반환하는 함수
const findStore = function (foods) {
return foods.store;
};
// 각 책의 부제 모음
const stores = foods.map(findStore); // ['Macdonald', ...]
여러 데이터를 하나의 데이터로 응축(reduce)할 때 사용한다.
// 메뉴 하나의 가격을 누적값에 더한다.
const priceReducer = function (sum, foods) {
return sum + foods.averagePrice;
};
// 초기값에 0을 주고, 숫자의 형태로 가격을 누적한다.
let initialValue = 0
// 모든 메뉴의 가격을 누적한 평균을 구한다.
const foodsAvgPrice = foods.reduce(priceReducer, initialValue) / foods.length;
function joinName(resultStr, user) {
resultStr = resultStr + user.name + ', ';
return resultStr;
}
let users = [
{ name: 'Hyesoo', city: 'Hwaseong' },
{ name: 'Jimmy', city: 'Newyork' },
{ name: 'Julia', city: 'Roma' }
];
console.log(users.reduce(joinName, '')); // Hyesoo, Jimmy, Sindy
function makeAddressBook(addressBook, user) {
let firstLetter = user.name[0];
if(firstLetter in addressBook) {
addressBook[firstLetter].push(user);
} else {
addressBook[firstLetter] = [];
addressBook[firstLetter].push(user);
}
return addressBook;
}
let users = [
{ name: 'Hyesoo', city: 'Hwaseong' },
{ name: 'Jimmy', city: 'Newyork' },
{ name: 'Julia', city: 'Roma' }
];
console.log(users.reduce(makeAddressBook, {}));
/* 실행결과
{
H: [
{ name: 'Hyesoo', city: 'Hwaseong' }
],
J: [
{ name: 'Jimmy', city: 'Newyork' },
{ name: 'Julia', city: 'Roma' }
]
}
*/