1 2 3 4 5 6 L

Page Header > Subtitle

[javascript] 함수형 프로그래밍 - 함수형으로 전환

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. 30세 이상인 users를 거른다. 
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);
 
// 2. 30세 이상인 users의 names를 수집한다.
var names = [];
for (var i = 0; i < temp_users.length; i++) {
  names.push(temp_users[i].name);
}
console.log(names);
 
// 3. 30세 미만인 users를 거른다.
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);
 
// 4. 30세 미만인 users의 ages를 수집한다.
var ages = [];
for (var i = 0; i < temp_users.length; i++) {
  ages.push(temp_users[i].age);
}
console.log(ages);​ 

 

2. 함수형 프로그래밍

 

function _filter(list, predi) {
  var new_list = [];
  _each(list, function(val) {
    if (predi(val)) new_list.push(val);
  });
  return new_list;
}​ 
 
function _map(list, mapper) {
  var new_list = [];
  _each(list, function(val, key) {
    new_list.push(mapper(val, key));
  });
  return new_list;
}​ 
 
function _is_object(obj) {
  return typeof obj == 'object' && !!obj;
}
 
function _keys(obj) {
  return _is_object(obj) ? Object.keys(obj) : [];
}​ 
 
function _each(list, iter) {
  var keys = _keys(list);
  for (var i = 0, len = keys.length; i < len; i++) {
    iter(list[keys[i]], keys[i]);
  }
  return list;
}
 
 
var over_30 = _filter(users, function(user) { return user.age >= 30; });
console.log(over_30);
var names = _map(over_30, function(user) {
  return user.name;
});
console.log(names);
var under_30 = _filter(users, function(user) { return user.age < 30; });
console.log(under_30);
var ages = _map(under_30, function(user) {
  return user.age;
});
console.log(ages);​ 

 

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기
captcha
자동등록방지 숫자입력

JS/Node.js

번호 제목 글쓴이 날짜 조회수
39 javascript [javascript] async, await를 사용하여 비동기 javascript를 동기식으로 만들자 미도어묵 02-18 1,022
38 javascript JavaScript 합집합, 교집합, 차집합, 대칭차 미도어묵 11-23 1,270
37 javascript jQuery 플러그인 부트스트랩의 콤포넌트(modal) 미도어묵 10-04 1,132
36 javascript Javascript 숫자에 천단위로 콤마(,) 찍기 미도어묵 08-20 791
35 javascript 함수형 프로그래밍 - 함수형으로 전환 미도어묵 08-09 857
34 Node.js nodejs & api call example 미도어묵 06-25 815
33 javascript jQuery 핸드폰 번호 체크하기 미도어묵 06-25 844
32 Node.js Node.js 업그레이드 미도어묵 04-23 762
31 Node.js node.js cross 도메인 header 처리 미도어묵 03-12 804
30 javascript hls.js 및 데모 미도어묵 02-22 796
29 Node.js node.js memcached_guide 미도어묵 01-02 799
28 Node.js clustering node + socket.io + redis 사용법 미도어묵 09-29 1,597
27 javascript script sample 예제 관리자 09-20 818
26 Node.js 커넥션 연결 확인 관리자 09-01 755
25 javascript [문법] [TypeScript] Electron + Vue.js 예제 관리자 07-24 1,082
24 javascript 웹 풀스택 입문을 위한 약 500페이지 분량의 교재 관리자 07-11 904
23 javascript [TypeScript] 타입스크립트 기초 세미나 자료 관리자 06-10 877
22 javascript javascript 함수 지향 관리자 04-08 787
21 Node.js Node.js 로 웹 사이트 데이터 가져오기 관리자 04-06 826
20 Node.js [MongoDB] Application / Mongoose를 이용하여 간단한 채팅 프로그램 개발 관리자 03-30 878