함수형으로 전환하기[함수형 프로그래밍]

함수형으로 전환하기

map과 filter

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 }
];

// 1. 명령형 코드
//	1-1. 30세 이상인 users를 거른다.
var temp_users = [];
for(var i =0; i<users.length; i++) {
	if(user[i].age >= 30) {
    	temp_user.push(user[i]);
    }
}

//	1-2. 30세 이상인 users의 names를 수집한다.
var names = [];
for(var i =0; i<users.length; i++) {
	names.push(users[i].name);
}

//	1-3. 30세 미만인 users를 거른다.
var temp_users = [];
for(var i =0; i<users.length; i++) {
	if(user[i].age < 30) {
    	temp_user.push(user[i]);
    }
}

//	1-4. 30세 미만인 users의 names를 수집한다.
var names = [];
for(var i =0; i<users.length; i++) {
	names.push(users[i].name);
}

// 2. _filter, _map으로 리펙토링

// 추상화의 단위를 객체나 함수를 이용한다.
function _filter(list, predi) {
	var new_liet = [];
	for(var i =0; i<list.length; i++) {
    	// 변경이 많은 부분을 함수로 변경
		if(predi(list[i])) {
    		new_liet.push(list[i]);
    	}
	}
	ruetnr new_list;
}

_filter(users, function(user) { return user.age >= 30; } );


// 다형성이 높고 data가 어떤 형식인지 알지 못한다.
function _map(list, mapper) {
	var new_list = [];
    for(var i=0; i<list.length; i++) {
    	new_list.push(mapper[i]);
    }
    return new_list;
}

_map(users, function(user) { return user.naem } );

// 함수형 프로그래밍은 대입문을 잘 사용하지 않는다.
// 중간에 변경할 여지가 없기 때문에 안정성이 높다.
_map(
	_filter(users, function(user) { return user.age >= 30; } ),
	, function(user) { return user.naem }
);

// 3. each만들기