<script>
var users = [
{ id: 1, name: 'ID', age: 36 },
{ id: 2, name: 'BJ', age: 32 },
{ id: 3, name: 'JM', age: 32 },
{ id: 4, name: 'PJ', age: 27 },
{ id: 5, name: 'HA', age: 25 },
{ id: 6, name: 'JE', age: 26 },
{ id: 7, name: 'JI', age: 31 },
{ id: 8, name: 'MP', age: 23 }
];
30세 이상인 users
를 거르는 코드를 만들어 보자.
var temp_users = [];
for (var i = 0; i < users.length; i++) {
if (users[i].age >= 30) {
temp_users.push(users[i]);
}
}
function _filter(){
var new_list = [];
for (var i = 0; i < users.length; i++) {
if (users[i].age >= 30) {
new_list.push(users[i]);
}
}
console.log(new_list);
}
temp_users
를 new_list
로 바꿔주었다. new_list
라고 이름을 수정해주자. function _filter(){
var new_list = [];
for (var i = 0; i < users.length; i++) {
if (users[i].age >= 30) {
new_list.push(users[i]);
}
}
return new_list;
}
console.log(new_list)
는 외부 세계에 영향을 주는 부수 효과이다. return
으로 바꾸어주자. function _filter(users, predi){
var new_list = [];
for (var i = 0; i < users.length; i++) {
if (predi(users[i])) {
new_list.push(users[i]);
}
}
return new_list;
}
filter
함수는 users
를 받아야 하므로 filter(users)
로 바꾸어주었다. if (users[i].age >= 30) {
이다. predi
라는 함수를 만들어주자. predi
는 if문
안쪽에서 실행되며 user
들을 하나씩 넘기며 실행된다. 응용형 함수
여기서filter
와 같은 함수를 응용형 함수(또는 적용형 프로그래밍)라고 한다.
응용형 함수란, 함수가 함수를 받아서 원하는 시점에 해당하는 함수가 알고있는 인자를 적용하는 식으로 프로그래밍된다. 즉, 함수가 함수를 인자로 받아서 원하는 시점에 평가를 하며 이 함수에서 알고 있는 특정한 인자를 적용해 나가면서 로직을 완성한다.
고차함수
또한filter
는 고차함수이기도 하다. 고차함수는 함수를 인자로 받거나, 함수를 리턴하거나, 함수 안에서 함수를 인자로 받은 함수를 실행하는 함수를 말한다.
잘 작동되는지 확인해보자.
console.log(
_filter(users, function(user) {return user.age >= 30;}));
filter는 users만을 위한 것이 아니다.
console.log(_filter([1, 2, 3, 4], function(num) {return num % 2;}));
users
일 필요가 없다. list
로 바궈준다. function _filter(list, predi){
var new_list = [];
for (var i = 0; i < list.length; i++) {
if (predi(list[i])) {
new_list.push(list[i]);
}
}
return new_list;
}