stringifyJSON.js
재귀를 이용해 메서드 JSON.stringify를 함수의 형태로 직접 구현하기.
작성코드 및 풀이
function stringifyJSON(obj) {
// your code goes here
// 1. 객체, 배열도 아닌 경우
// number, bloolean, null인 경우
if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null) {
return `${obj}`;
}
// 1-1. string은 "" 로 한번더 감싸줘야함. (ex. "string" -> ""string"")
// string인 경우
if (typeof obj === 'string') {
return `"${obj}"`;
}
// 2. 배열인 경우
// Array.isArray(obj) 사용하기.
if (Array.isArray(obj)) {
let newArr = [];
for (let i = 0; i < obj.length; i++) {
newArr.push(stringifyJSON(obj[i]));
}
return `[${newArr}]`;
}
// 3. 객체인 경우
// 0. 빈객체를 만들자
// 1. 키를 만들자.
// 2. 값을 만들자.
// 3. 키값 만든거를 빈 객체에 붙이자. // `${keys[key]} : $obj[keys[key]]`
if (typeof obj === 'object' && obj !== null) {
let newObj = "";
// Object.keys() 메서드는 주어진 객체의 속성 이름들을
// 일반적인 반복문과 동일한 순서로 순회되는 열거할 수 있는 배열로 반환
let keys = Object.keys(obj);
for (let key = 0; key < keys.length; key++) {
newObj += `"${keys[key]}":${stringifyJSON(obj[keys[key]])}`;
if (key < keys.length - 1) {
newObj += ",";
} else if (obj[keys[key]] === undefined) {
return '{}';
}
}
return `{${newObj}}`;
}
}
// 방법 2.
// if (typeof obj === "object" && obj !== null) {
// let newObj = "";
// for (let key in obj) {
// if (typeof obj[key] === "function" || obj[key] === undefined) {
// return "{}";
// }
// newObj += `${stringifyJSON(key)}:${stringifyJSON(obj[key])},`;
// }
// newObj = newObj.slice(0, -1);
// return `{${newObj}}`;
// }
// }