-
함수형 프로그래밍 (functional programming)Javascript 2020. 3. 27. 10:01
forEach
element를 하나씩 불러옵니다.
let users = [ { name: 'Tim', age: 40 }, { name: 'Satya', age: 20 }, { name: 'Sundar', age: 50 } ]; //for문을 이용한 반복 for(let i=0; i<users.length; i++) { console.log('Name: ' + users[i].name); } //Name: Tim //Name: Satya //Name: Sundar
//함수를 이용한 반복 function printName(user) { //users의 element가 하나씩 parameter로 들어온다. console.log('Name: ' + user.name); } users.forEach(printName) //Name: Tim //Name: Satya //Name: Sundar function printName(user, idx) { console.log(user.name, idx); } users.forEach(printName) //Tim 0 //Satya 1 //Sundar 2 users.forEach(function(user, idx){ console.log(user.name, idx); }) //Tim 0 //Satya 1 //Sundar 2
map
element를 하나씩 불러오고 push합니다.
let users = [ { name: 'Tim', age: 40 }, { name: 'Satya', age: 20 }, { name: 'Sundar', age: 50 } ]; //for문을 이용하여 users.name을 하나씩 불러와서 usernames에 push한다. for(let i=0; i<users.length; i++) { usernames.push(users[i].name); } usernames; // ['Tim', 'Satya', 'Sundar']
//forEach를 이용하여 usernames에 users.name이 하나씩 push된다. function pushName(user){ usernames.push(user.name); } users.forEach(pushName); usernames; // ['Tim', 'Satya', 'Sundar']
//map으로 element를 하나씩 push한다. function getName(user){ return user.name; } getName({ name: 'Tim', age: 40 }) // "Tim" let usernames = users.map(getName) console.log(usernames) // ['Tim', 'Satya', 'Sundar'] //콜백함수를 사용 let usernames = users.map(function(user){ return user.name; }) console.log(usernames) // ['Tim', 'Satya', 'Sundar']
filter
element를 하나씩 불러오고 조건에 대하여 true일때 push합니다.
let users = [ { name: 'Tim', age: 40 }, { name: 'Satya', age: 20 }, { name: 'Sundar', age: 50 } ]; //절차지향 let searchResults = []; for(let i=0; i<users.length; i++){ if(users[o].age > 40) { //40보다 나이가 많은 사람을 찾는다 searchResults.push(users[i]) //많으면. searchResults에 담는다 } } //객체지향 let searchResults = []; users.forEach(function(user){ if(user.age > 40) { //40보다 나이가 많은 사람을 찾는다 searchResults.push(user) //많으면. searchResults에 담는다 } })
//filter //조건을 충족한 element를 하나씩 push합니다. function moreThan40(user){ return user.age > 40 //조건 } users.filter(moreThan40) //name중에 'T'를 포함한 element를 push한다. function includesT(user){ return user.name.indexOf('T') !== -1; } users.filter(includesT) //[{name: "Tim", age: 40}] //콜백함수 let hasT = users.filter(function(user){ return user.name.indexOf('T') !== -1; }) console.log(hasT) //[{name: "Tim", age: 40}]
reduce
여러 개의 값이 담긴 array를 줄여서(reduce) 최종적으로 하나의 값(str / int / obj)으로 만듭니다.
누적 값 element를 하나씩 줄여가면서 생기는 중간 과정(결과) 현재 값 reducer가 array를 지나갈 때 만나는 element 초기 값 element를 줄이기 전, 누적 값의 초기 상태 reduce 함수의 파라미터 순서
누적값(accumulator), 현재 값(value), 인덱스(index), 원본 배열(array)
function reducer(accumulator, value, index, array)function reducer(accumulator, value, index, array){ return accumulator; //accumulator에 값을 누적시킨다 } //초기 값 let expectedResult = { 'A': 0, 'B': 0 }; users.reduce(reducer, expectedResult)
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) { return accumulator + currentValue; });
호출 횟수 accumulator currentValue return 첫번째 0 1 1 두번째 1 2 3 세번째 3 3 6 네번째 6 4 10 let users = [ { name: 'Tim', age: 40 }, { name: 'Satya', age: 20 }, { name: 'Sundar', age: 50 } ]; // 'Tim, Satya, Sundar' 출력하기 //절차지향 let resultString = '' for(let i=0; i<users.length; i++){ reusultString = resultString + users[i].name + ', '; } //"Tim, Satya, Sundar, " //객체지향 function joinName(reaultStr, user){ resultStr = resultStr + user.name + ', ' return resultStr } users.reduce(joinName, '') //초기 값('') //콜백함수 let result = users.reduce(function(resultStr, user){ resultStr = resultStr + user.name + ', ' return resultStr }, '') //초기 값('') console.log(result) //"Tim, Satya, Sundar, "
주소록 만들기(advanced)
더보기주소록 만들기
let users = [ { name: 'Tim', age: 40 }, { name: 'Satya', age: 20 }, { name: 'Sundar', age: 50 } ]; function newAddress(address, user){ //이름의 첫번째 글자로, 주소록의 색인(key)을 만든다. let firstLetter = user.name[0]; //address {} //만일, key가 있으면, 해당 배열에, 사람을 추가한다. if(firstLetter in address) { address[firstLetter].push(user) //만일, key가 없으면, 해당 배열을 만들고, 사람을 추가한다. } else { address[firstLetter] = []; address[firstLetter].push(user); } return address } users.reduce(newAddress, {});
'Javascript' 카테고리의 다른 글
재귀함수 (0) 2020.03.30 정수 메서드 (interger method) (0) 2020.03.30 배열의 메서드 (array method) (0) 2020.03.26 문자열 메서드 (string method) (0) 2020.03.26 객체 (object) (0) 2020.03.26