[javascript] map 함수에서 객체를 리턴할때 질문

조회수 4792회

안녕하세요. 아래의 map함수는 inventors 에서 first, last 이름만 가져오는 함수인데요.



    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 }
    ];

   const inventorsName1 = inventors.map( inventor => {
        return  {inventor["first"] , inventor["last"]}; // Uncaught SyntaxError: Unexpected token [
    });

    const inventorsName2 = inventors.map( inventor => {
        var obj = {};
        obj["first"] = inventor.first;
        obj["last"] = inventor.last;
        return obj    
    });

inventorName1 이나 inventorName2 나 모두 같은 객체를 리턴하는것같은데.. 왜 1과 같은 방식으로 하면 오류가 나올까요?

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

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

2 답변

  • 아 .. 또 자답입니다 ㅠㅠㅠㅠ

    저는 처. 에 {} 타입으로 리턴이 안되는것인가? 생각해보았는데.. 역시 문법에는 오류가 없고.. 제가 잘못 표기했기 때문이었습니다.

       const inventorsName1 = inventors.map( inventor => {
            return  {inventor["first"] , inventor["last"]}; // Uncaught SyntaxError: Unexpected token [
        });
    

    의 리턴 객체에는 value 만 있고 key가 없습니다.

    따라서 ..

     const inventorsName1 = inventors.map( inventor => {
            return { first : inventor.first , last : inventor.last}
        });
    

    로 수정해야 합니다.

    참고로 map함수와 filter 함수는 안의 콜백함수의 인자를 돌면서 첫번쨰 인자 (여기서는inventor) 가 달라질때마다 리턴값을 저장(여기서는 first , last 가 저장된 obj 객체) 하고 그것을 한꺼번에 inventorName 변수에 array 형식으로 출력하는것같네요.

    질문도, 답변도 읽어주셔서 감사합니다.

    제가 헷갈렸던 이유는 map함수가 분명 각 element 를 돌면서 return을 하는데, 그것이 어떻게 저장되었다가 한꺼번에 변수에 저장이 되는거지? 에 대해 이해가 가지 않고.. 그냥 뭉뚱그려서 배열에서 일괄적으로 명령을 수행하고 싶을때 map함수를 수행한다! 라고 생각하고 넘어갔기 때문이것같아요. 지금도 맞게 이해했는지... 모르겠습니다 ㅠㅠ 혹시 피드백주실부분이 있다면 감사할것같습니다!

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 안녕하세요!

    제가 헷갈렸던 이유는 map함수가 분명 각 element 를 돌면서 return을 하는데, 그것이 어떻게 저장되었다가 한꺼번에 변수에 저장이 되는거지?

    function NaiveMap() {
      let index = -1
      const length = array == null ? 0 : array.length
      const result = new Array(length)
    
      while (++index < length) {
        result[index] = func(array[index], index, array)
      }
      return result
    }
    

    map함수는 당연히 c++으로 작성되어있겠지만, 구글 v8 엔진 테스트코드에 느슨한 맵 함수가 자바스크립트로도 있네요.

    의문이 약간이나마 해소되었길 바랍니다!

    • 먼저 답변해주셔서 감사합니다. 질문이 몇개 있는데요 ... 1) javascript에 func() 라는 문법이 있나요...? 2) naiveMap을 보면 map 함수는 result라는 변수가 있어서 element를 돌면서 저 result에 저장되는것처럼 보이네요. 아마도 그 부분을 저한테 보여주시려고 하신것이지요...? 3) map함수는 왜 당연히 c++로 작성되어있을까요...? 알 수 없는 사용자 2019.3.4 20:19
    • 작성해주신 글을 읽고 제가 러프하게 느낀건.. map함수에는 기본적으로 result라는 변수가 있어서 그곳에 저장되겠군..? 인데 이게 맞게 이해한건지 모르겠네요 ㅎㅎ... 답변 감사합니다! 알 수 없는 사용자 2019.3.4 20:21
    • 넵.. result라는 리스트가 생성되고 반환된다는 이야기를 하고 싶었는데 .. ㅠㅠ 1) func()는 문법이아니고, 그냥 함수라는걸 나타내기위해 저렇게 사용한거입니다! map()안에 함수를 넘겨주는데 그걸 표현한거입니다. 저 코드는 음.. 수도코드라고 이해하고 넘어가면 좋을 것 같아요 2) 네.. 3) 자바스크립트 해석기,엔지, 컴파일러 들은 보통 로우레벨로 작성되어 최진우 2019.3.4 22:09
    • 있는데요 구글에서 만든 해석기인 v8엔진은 c++로 작성되어있습니다. 그래서 자바스크립트 built-in 함수들은 c++로 작성되어있습니다! 최진우 2019.3.4 22:10
    • 아하 넵넵 감사합니다!! 알 수 없는 사용자 2019.3.5 08:55

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

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

(ಠ_ಠ)
(ಠ‿ಠ)