stringifyNumbers
오브젝트를 파라미터로 받고 number을 전부 string으로 바꾸어 새로운 배열을 반환하는 재귀함수 stringifyNumbers를 작성하시오.
이 문제를 해결하기 위해 필수적으로 충족시켜야 할 것들을 이렇게 정리해 놓았다.
먼저 새로운 배열을 생성해 그 안에 데이터를 받아 반환해야 한다.
let returnObj = {}
그 다음에는 nested object의 각 key에 접근해 number타입을 구분하고 string으로 변환해야한다. 이때 객체의 접근에는 이전에도 사용했던 방법을 사용했다. 바로 for루프를 사용하는 것이다. 다음과 같이 for루프를 사용하면 param으로 받은 object의 키를 1차적으로 반환한다.
for(let key in param)
//만약 다음과 같이 오브젝트가 존재한다면
let obj = {
num: 2,
test: [],
test2: {
val: 4,
info: {
isRight: true,
random: 66
}
}
}
//해당 for 루프에서는 결과값으로 num, test, test2를 반환할 것이다.
그렇게 받아낸 key를 이용해서 객체의 값으로 접근한다. 그리고 typeof를 사용해 그것이 number인지 아니면 object인지(objcet일 경우 해당 값으로 한 번 더 재귀를 실행한다.) 여기서 중요한건 Array인지도 확인해야한다는 것이다 Array타입일 경우 형변환도 재귀도 실행하지 않는다.
if(typeof(param[key]) === 'number'){
returnObj[key] = param[key].toString();
}else if(typeof(param[key]) === 'object' && !Array.isArray(param[key])){
returnObj[key] = stringifyNumbers(param[key]);
}else{
returnObj[key] = param[key]
}
object를 접근하는 것에 있어서 나는 처음에 prarm.key이렇게 점 표기법으로 객체에 접근하려고 했다. 하지만 그러지 못했다. 점 표기법으로는 변수로 접근하는게 불가능하기 때문이다. 이 단점은 대괄호 표기법이 보완해주고 있다. 그래서 대괄호 표기법을 이용해 해당 문제를 해결할 수 있었다.
이번에도 해답 솔루션과 거의 비슷한 답을 냈기 때문에 해답솔루션의 풀이까지는 넘어가지 않도록 하겠다.
다음에는 .toString()이 어떤 방식으로 형변환을 진행하는지를 연구하고자 한다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString
https://developer-talk.tistory.com/155
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Property_Accessors