[과제] JSON.stringify

비트·2023년 6월 13일
0

CodeStates

목록 보기
44/54
post-thumbnail

재귀 활용


재귀 이전 블로그 참고하기

JSON 변환 메서드 정리

재귀 문제 풀이




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}}`;
  //   }
  // }

profile
Drop the Bit!

0개의 댓글