7월 24일 토요일 TIL (2)

김병훈·2021년 7월 24일
0

til

목록 보기
44/89

6번

function removeNumberValues(obj) {
  for(let props in obj){
    if(typeof (obj[props]) === 'number'){
      delete obj[props];
    }
  }
    
}

// for(let props in obj){
//     if(typeof (props) === 'number'){
//       delete obj[props];
//     }
//   }
//     return obj;

typeof연산자를 통해서 obj의 키값에 접근해야했는데 그냥 props로 접근해서 문제가 틀렸었다.

15번

배열과 객체를 입력받아 배열의 각 요소들을 객체의 키로 했을 때,
그 값을 추출하여 만든 새로운 객체를 리턴하는 문제였다.
먼저 객체를 for in 반복문으로 값들을 순회를하고, 배열도 for문으로 순회를 하는 생각을 하였다. 근데 객체 반복문에서 키값이 아니라 키를 어떻게 조회할지 망설였는데 for (let props in obj) 에서 객체의 키값을 조회할 때 obj[props]를 사용했으니 키 네임은 props일 것 같아서 배열의 i 번째 인덱스값과 props가 같을 경우를 완성 시켰다.

내가 겪은 문제

문제는 위의 조건이 부합하는 값들만 새로운 객체가 할당된 변수에 더해주는 것 이었는데, 첫번째로는 스트링은 += 로 계속 추가해주고 최종값을 리턴하는 방법이 있었고, 배열은 push나 unshift로 넣어주는 방법이 있었다. 근데 객체는 어떻게 더해줄지 좀 고민이 들었다
처음에는 다음과 같이 썼었다.

newObj += obj[props];

이렇게 쓰면 스트링값에 넣어줄 때랑 같아서 틀린 코드였다.
레퍼런스를 봤더니

newObj[props] = obj[props];

이렇게 나왔는데, props가 애초에 obj에서 반복할때 썼던 것인데 이게 맨 위에서 선언한 빈 배열에도 적용이 되는가 싶어서 이해가 되질 않았다.

19번

첫번째 수도코드

Cautions
1. 추가하려는 속성이 이미 첫번째 객체에 존재하는 경우, 기존값을 그대로 둔다.
2. 두번째 객체는 수정하지 않아야 한다.
3. 별도의 리턴문 x

두 개의 객체를 입력받아 두번째 객체의 속성들을 첫번째 객체에 추가해야한다.

for in 을 이중으로 써서 다른값만 넣어주면 될 것 같다.
문제는? 무엇을 먼저 순회할 것인가...
두번째 객체는 수정하지 않아야한다.
obj1을 먼저 순회하고 두번째로 obj2를 순회해서 obj2의 안에서 수정하게 되니깐 obj2를 먼저 순회하는게
맞는 것 같다는 판단

결과

첫번째 수도코드는 틀렸다. 기억해야 할 것은

for(let props in obj2){
    if(!(props in obj1)){
      obj1[props] = obj2[props];
    }
  }

위에서 먼저 obj2를 순회를 하고 obj1에 같은 키네임이 있는지 없는지 여부를 if문 안에 !를 넣어서 코드를 짠 것이다. 비슷하게 contains 메소드를 사용하려했는데 검색해보니 node에서 사용하는 메소드였다.

profile
블록체인 개발자의 꿈을 위하여

0개의 댓글