아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
향기로운파리253
향기로운파리25320.12.15

객체와 배열 질문입니다. javascript

function select(arr, obj) { // 배열과 객체를 입력받아서 배열인덱스 값의 요소가 객체의 key가 되는 함수입니다. const arr = ['a', 'c', 'e']; const obj = { a: 1, b: 2, c: 3, d: 4 }; // 입력 받은 배열과 객체 let result = {}; for(let key in obj) for(let n = 0; n<=arr.length; n++){ if(arr[n] === key) { result[key] = obj[key]; //저는 result = obj[key]로 작성했는데 틀렸다고 해서 한참 고민하다가 //해설을 보니 result[key] = obj[key] 맞다고해서요 //차이가 뭔가요 ㅠ result는 이미 빈객체인 상태아닌가요? } } return result;}

55글자 더 채워주세요.
답변의 개수2개의 답변이 있어요!
  • 혹시 select 함수 내부에서 return 하는 result를 출력해보셨나요?

    질문자님께서 말씀하신대로

    for(let key in obj) for(let n = 0; n<=arr.length; n++){ if(arr[n] === key) { result = obj[key]; //저는 result = obj[key]로 작성했는데 틀렸다고 해서 한참 고민하다가 //해설을 보니 result[key] = obj[key] 맞다고해서요 //차이가 뭔가요 ㅠ result는 이미 빈객체인 상태아닌가요? } }

    이 상태라면 어떻게 코드가 실행되는지 볼까요?

    arr를 돌면서 key와 맞는 경우를 찾습니다. 여기까진 좋습니다! 그런데, 현재의 코드는 result 라는 결과값을 담을 객체에 값을 할당하는게 아니라, result라는 변수 자체에 값을 재할당하고 있습니다.

    이렇게 되면 돌면서 key 값은 제대로 찾겠지만, result 값이 계속해서 갱신되어서 마지막에 찾은 obj의 k 'c'의 값 3이 result에 정수로 담겨서 출력될겁니다.

    obejct (result)에 값을 할당하실 때에는 가장 쉬운 방법은

    해설에서 나와있는 것 처럼

    key처럼 변수가 아니라 이름을 정할 수 있는 경우 result.myKey = obj[key] key 값에 담긴 이름으로 이름을 정해야하는 경우 result[key] = obj[key]

    이렇게 사용하시면 됩니다!

    도움이 되셨길 바라며 오늘도 좋은 하루 되세요 😇


  • result[key] = obj[key] 가 맞는 이유는 for 문 내부에서

    if문으로 확인후 result 변수에 넣기 때문입니다

    즉, 프로그램 흐름을 따라가게 되면 result[key] = obj[key] 가 여러번 실행될수 있는거죠

    그래서 result = obj[key] 를 하게 되면 나중에 실행된 값이 최종적으로 저장이 되니.

    result 를 사용하면 안되는것입니다

    만약 result 만 굳이 써야 겠다면?

    result = obj[key] 명령 다음줄에

    다중 for 루프를 빠져나오는 명령을 적절히 사용해주시면 됩니다