ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • reduce()
    concept/javascript 2020. 3. 28. 12:57

     

     

    배열에서 반복이 필요할 for 문을 쓰지 않고 함수로서 작동할 있는 방법이 여러가지가 있다.

    예를 들어 forEach / map / filter / reduce 있다.

    중에서 reduce 배열의 여러 엘리먼트들의 개수를 원하는 기능을 만들어 엘리먼트 개수를 축소시키는 함수이다.

    그래서 reduce 함수가 작동이 되면 배열의 길이 만큼 작동이 반복되면서 결과값을 호출한다.

     

    reduce의 작동 원리: 배열 축소

    - 배열에서 문자열로

    - 배열에서 숫자로

    - 배열에서 객체로

    => 여러 개의 값이 담긴 배열이 줄여서 최종적으로 하나의 값으로 만드는 과정

     

     

    리듀스의 인자로는

    첫번째 함수

    두번째 초기값을 인자로 써서 작동할 있는데

    초기값은 옵션적인 부분이다.

    (바로 밑 검정 부분으로 정리된다.)

     

     array.reduce(reducer, [initialValue])      Immutable (기존 정보를 변형시키지 않는다.)

    - 리듀서 함수(리듀스 안에 들어가는 첫번째 파라미터!!)는 리턴값이 필요하며, 다음번 리듀서 호출 시, 첫번째 파라미터로 전달됨.

    - 리턴 값: 리듀서가 마지막으로 리턴하는 값

    - 리듀서 함수의 파라미터 순서

    : 순서대로 누적값(accumulator), 현재 엘리먼트(current value), 인덱스(index), 원본배열(array)

                                        밑줄 친 파라미터만 필수적 요소

     

    <연습문제>

    ::: user의 객체 정보가 배열의 형태로 주어졌을 때 색인이 들어간 전화번호부 만들기 :::

    //user의 객체 정보가 배열의 형태로 주어졌을 때 색인이 들어간 전화번호부 만들기
    
    let users = [
        {name: 'Tim', age: 40},
        {name: 'Satya', age: 30},
        {name: 'Sundar', age: 50}
    ]
    
    function makeAddressBook(addressBook, user){
      let firstLetter = user.name[0];
      // firstLetter가 addressBook에 있으면?
      // []안에 user 정보를 푸시한다.
      if(firstLetter in addressBook){
        addressBook[firstLetter].push(user);
      } else {
      // firstLetter가 addressBook 안에 없으면?
      // 빈 배열을 만들고 user 정보를 푸시한다.
        addressBook[firstLetter] = [];
        addressBook[firstLetter].push(user);
      }
    return addressBook;
    }
    
    users.reduce(makeAddressBook, {}); //**여기서 초기값 설정 꼭 해줘야 한다!

     

    ::: 결과 :::

    let addressBook = {
      T: [
      { name: 'Tim', age: 40}
      ],
      S: [
      { name: 'Satya', age: 30 },
      { name: 'Sundar', age: 50 }
      ]
    }

     

    • 헷갈렸던

    함수를 만들 엘리먼트들에 다가가는 과정을 accumulator currentValue 이용해서 배열의 원소에 자동으로 접근할 있다는 개념이 익숙하지 않았던게 가장 문제였던 같다.

    'concept > javascript' 카테고리의 다른 글

    함수에서 헷갈릴 수 있는 개념  (0) 2020.03.29
    숫자 활용 메소드(Number/Math method)  (0) 2020.03.29
    Mutable vs Immutable  (0) 2020.03.27
    정규표현식(regular expression)  (0) 2020.03.27
    문자열 메소드 (string method)  (0) 2020.03.26

    댓글

Designed by Tistory.