[javascript] arrow function 질문

조회수 512회

안녕하세요. arrow function을 공부하고 있는데 질문이 있습니다.

    const inventors = [
      { first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
      { first: 'Isaac', last: 'Newton', year: 1643, passed: 1727 },
      { first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
      { first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
      { first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
      { first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
      { first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
      { first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
      { first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
      { first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
      { first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
      { first: 'Hanna', last: 'Hammarström', year: 1829, passed: 1909 }
    ];

    // Array.prototype.filter()
    // 1. Filter the list of inventors for those who were born in the 1500's
    const afterInventors = inventors.filter(function(element){
        if(element.year > 1500){
            return element
        } 
    });

위의 filter 함수를 arrow function으로 고쳐보았는데요.

    const aI = inventors.filter(element => {if(element.year > 1500) return element});

그런데 arrow function에서 한줄이면 return 을 생략할 수 있다고 하여 return 을 생략하여 만들어 보려고 했는데

    const aI2 = inventors.filter(element => element.year > 1500);

위와 같이 선언해 생성된 aI2가 같은 값을 담고 있더라구요. 그런데 ai2가 잘 이해가 가지않습니다. arrow function에서는 조건문도 생략이 가능한가요? 그리고 조건문을 생략하는 경우 무엇을 리턴해주는 것인가요...

aI2 처럼 생략해서 사용하고 싶은데... al 처럼 밖에 사용을 못하겠네요.

질문 읽어주셔서 감사합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 부끄러워서 지울까 하다가ㅠㅠ 자답 남깁니다.

    filter 메소드는 Boolean타입을 리턴해야합니다. 따라서..

    const aI = inventors.filter(element => {if(element.year > 1500) return element}); 와 같이 사용해도 결과는 맞겠지만 const aI = inventors.filter(element => {if(element.year > 1500) return Boolean}); 을 사용하는것이 맞는 표현입니다.

    filter 의 경우 true , false를 리턴하기 때문에 const aI2 = inventors.filter(element => element.year > 1500); 와 같이 작성이 가능합니다.

    따라서 true, false 를 반환하는 filter 메소드는 arrow function을 사용하면 엄청 편하게 함수 작성이 가능합니다.

    부끄럽습니다 ㅠ JS 공부 화이팅 ...

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 이제보니 아예 사용을 잘못하신 것이었네요... 허허 화이팅! 알 수 없는 사용자 2019.2.18 19:14
    • neurioWhAI님 답변 감사합니다 ㅎㅎ.... 저는 과연 개발자가 될 수 있을까요 ... ㅜㅜ 흐.. 알 수 없는 사용자 2019.2.18 20:31
    • 당연히 가능합니다. 혼자 해결하신 것만 해도 상위권에 든다고 뿌듯해하셔도 됩니다 ㅎㅎ 또 언어 자체도 타입에 너무 느슨한 것이 이런 실수를 만드는 원인 중 하나이니 너무 본인 탓 하실 필욘 없어요. 알 수 없는 사용자 2019.2.18 21:17
  • =>는 조건문이 아니라 연산자이며 그 중에서도 비교 연산자 분류에 속합니다.
    비교 연산자는 두 값을 받아 비교한 후 논리 값을 반환하기 때문에 aI2와 같이 사용할 수 있는겁니다.
    조건문 if (condition)은 단순히 condition에 사용된 표현식의 결과를 이용하여 분기하는 것이지 if가 비교 연산을 수행하는 것은 아닙니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)