본문 바로가기

자료구조알고리즘/코드스테이츠 Coplit

07_convertListToObject

[ 문제 ]

입출력 예시로 문제를 이해하자면, 입력받은 2차원 배열(배열 안에 요소가 배열인것. ex: [[1],[2]])에서 요소인 배열의 0번째 요소가 객체의 key, 1번째 요소가 객체의 value인 객체를 반환하는 것이다.

입력받은 배열이 const arr = [['make', 'Ford'],['model', 'Mustang']]이면,

0번째 요소인 'make', 'model'이 key, 'Ford', 'Mustang'이 각각 value가 되어

{make : 'Ford', model:'Mustang'}을 반환한다.

 

 

[ 풀이 ]

나의 로직은 다음과 같다.

1/ 먼저 빈 객체를 선언한다.

2/ 반복문으로 객체에 속성들을 할당한다.

 

(하지만 처음에 많이 헤맸다...

내가 간과한건 빈 배열을 입력받은 경우와 중복되는 키가 있는 경우..

특히 중복되는 키가 있는 경우를 어떻게 해야할지 몰라 더더욱 헤맸다.. 또 반복문을 써야하나..이런고민!)

function convertListToObject(arr) {
  let obj = {}; //먼저 빈 객체를 선언한다. 
  for(let i = 0; i < arr.length; i++){
    if(arr[i].length === 0){ //입력받은 배열의 요소가 빈배열일 경우,
      continue; //continue로 다음 반복으로 넘어가도록 한다.
    } else if(obj[arr[i][0]] !== undefined){ //배열의 요소인 배열의 0번째 요소가 있는경우!
      continue; //이때도 continue를 이용하여 이번 반복은 건너띄고 다음 반복으로 넘어가도록 한다. 
    } else { // 위의 두 경우가 아니면
      obj[arr[i][0]] = arr[i][1]  //obj인 객체에 key, value를 할당한다.
    }
  }
  return obj; //객체를 반환한다.
}

 

 

내가 예전에 쓴 코드는 아래와 같다. 오.. 훨씬 깔끔하고 직관적이다.

function convertListToObject(arr) {
let obj = {};
for(let i = 0; i < arr.length; i++){
  if(obj[arr[i][0]] === undefined && arr[i].length !== 0)
  obj[arr[i][0]] = arr[i][1]
}
return obj;
}

 

 

 

[ 레퍼런스 ]

레퍼런스도 예전에 내가 쓴 코드와 크게 다르지 않다.

arr[i].length !== 0을 arr[i].length > 0로 쓴 것만 조금 다를 뿐!

 

 

 

[ 새롭게 알게된 것 || 복습 ]

obj[arr[i][0]] === undefined면 obj라는 객체에 동일한 키와 해당 값이 없는것이고,

obj[arr[i][0]] !== undefined면 obj 객체에 동일한 키가 존재하는 것...!

'자료구조알고리즘 > 코드스테이츠 Coplit' 카테고리의 다른 글

09_ABCheck  (0) 2022.02.16
08_convertDoubleSpaceToSingle  (0) 2022.02.15
06_letterCapitalize  (0) 2022.02.09
05_firstReverse  (0) 2022.02.09
04_firstCharacter  (0) 2022.02.07