ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 함수형 프로그래밍 (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

    댓글

Designed by CHANUL