중복을 제거하고 함수형 프로그래밍을 알아보자
const words = ['aaaa','bbb','cc','d'];
const result = words.filter(function(word){
return word.length >= 2
});
// 위아래 같은 문장
const result = words.filter( word => word.length>=2);
> [1,2,3,4].filter(function(num) { return num%2 ;}); // 참값 리턴
> _filter([1,2,3,4], function(num) { return num%2 ; });
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},
]
/// if문 안에 그대로 조건을 써준 case
var temp_users = [];
for(var i =0 ; i < users.length ; i++){
if(users[i].age >= 30){
temp_users.push(users[i]);
}
}
console.log(temp_users);
```javascript
// if문 바깥으로 조건을 위임한 case
function _filter(list, predi) { // predi라는 함수에게 조건을 위임함
var new_list = [];
//★★★★★★ 원래 있는 값을 변경하지 않고 변형된 새로운 값을 리턴하는 식으로 값을 변형해 나간다.
for(var i =0 ; i < users.length ; i++){
if(predi(list[i]){ // 배열의 요소 하나씩 넘기면서 실행함
new_list.push(users[i]);
}
}
return new_list;
}
_filter(users, function(user) { return user.age >=30 } );
if문 안의 조건을 filter를 이용하여 predi라는 함수로 위임
_map(_filter(users, function(user) { return user.age >=30 } ), function(user) { return user.name } );
// map 안으로 filter를 써준 case
배열내장함수
고차함수(응용함수) -> 함수가 함수를 받아서 원하는 시점에 해당하는 함수가 알고있는 인자를 적용하는 식으로 프로그래밍함.
함수를 리턴 또는 함수안에서 함수를 인자로 받아서 실행