[ 문제 ]
입출력 예시로 문제를 이해하자면, 입력받은 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 |