collectStrings
오브젝트를 받고 오브젝트안의 모든 스트링을 리스트로 반환하는 collectStrings를 작성하시오.
이번도 이전에 풀었던 문제들과 같은 방식으로 해결했다.
function collectStrings(param){
let tmpArr = [];
for(let key in param){
if(typeof(param[key]) === 'object'){
tmpArr = tmpArr.concat(collectStrings(param[key]));
}else if(typeof(param[key]) === 'string'){
tmpArr.push(param[key]);
}
}
return tmpArr;
}
for루프를 사용해서 key를 이용해 접근한다면 nestedObject의 일차적 key에만 접근할 수 있기 때문에 불가피하게 for루프 내부에서 재귀함수를 호출해야한다.
O(n^2)의 시간복잡도가 걸리지 않는가 하지만 루프를 내부에서 계속해서 돌리는 것보다 훨씬 코드가 깔끔하고 효율적일것이라는 생각이 들었다.
나중에 시간이 되면 해당 코드를 더 효율적으로 구성할 수 있는 방법에 대해 연구해 보려고 한다. 아마 이 강의를 다 듣고 다른 알고리즘 방법도 터득한 뒤가 될거 같지만 그 때가 되면 다시 이 코드를 들여다 볼 예정이다.
concat을 사용하는것 보다는 +=를 사용하는 것이 더 효율적이라는것을 알고 있을것이다. 하지만 이번 코드에서 concat을 사용한 이유는 배열상태로 이어주고 싶었기 때문에다. +=를 사용하니 데이터끼리 접촉되었기 때문에 원하는 결과는 아니었다. 그래서 concat을 사용해서 tmpArr에 이어주었다.
해답 솔루션에서도 나와 완전히 똑같은 방식으로 문제를 해결했기 때문에 추가로 소개하지는 않겠다.
udemy.com/course/best-javascript-data-structures/learn/quiz/5338837#questions