CodeStates/Training

S3) Unit 1. [μ‹€μŠ΅] JSON.stringify

Jieunny 2023. 2. 14. 12:00

πŸ“£ μž¬κ·€λ‘œ JSON.stringify λ©”μ„œλ“œ κ΅¬ν˜„ν•˜κΈ°

1️⃣ Test 쑰건

βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "9"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "null"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "true"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "false"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ ""Hello world""둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "[]"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "[8]"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "["hi"]"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "[8,"hi"]"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "[1,0,-1,-0.3,0.3,1343.32,3345,0.00011999]"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "[8,[[],3,4]]"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "[[[["foo"]]]]"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "{}"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "{"a":"apple"}"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "{"foo":true,"bar":false,"baz":null}"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "{"boolean, true":true,"boolean, false":false,"null":null}"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "{"a":{"b":"c"}}"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "{"a":["b","c"]}"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "[{"a":"b"},{"c":"d"}]"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ κ°μ²΄λŠ” λ¬Έμžμ—΄ "{"a":[],"c":{},"b":true}"둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€
βœ“ ν•¨μˆ˜μ™€ undefinedλŠ” stringifyλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

2️⃣ μž‘μ„± μ½”λ“œ

function stringifyJSON(obj) {
  // your code goes here

  // 1. numberλ‚˜ null, boolean은 κ·Έλƒ₯ String으둜 λ³€ν™˜ν•΄μ„œ 좜λ ₯
  if(typeof(obj) === 'number' || obj === null ||  typeof(obj) === 'boolean') return String(obj);

  // 2. string은 ""μ”Œμ›Œμ„œ 좜λ ₯
  else if(typeof(obj) === 'string') return `"${obj}"`;

  // 3. undefined, function 은 stringift ν•΄μ„œλŠ” μ•ˆλœλ‹€.
  else if(typeof(obj) === 'undefined' || typeof(obj) === 'function') return 0;

  // 4. 배열인 경우 μš”μ†Œ λŒλ©΄μ„œ μš”μ†Œ 각각을 stringifyJSON ν•¨μˆ˜μ— λ‹΄μ•„μ„œ JSON으둜 λ³€ν•œ 값을 λ‹€μ‹œ 배열에 λ°›μ•„μ„œ λ°˜ν™˜
  else if(Array.isArray(obj)) {
    const answer = [];
    for(let i of obj){
      let temp = stringifyJSON(i);
      answer.push(temp);
    }
    return `[${answer}]`;
  }

  // 5. 객체인 κ²½μš°λ„ λ°°μ—΄μ΄λž‘ λΉ„μŠ·ν•˜κ²Œ, λŒ€μ‹  ν‚€/값을 λ‘˜ λ‹€ JSON으둜 λ³€ν™˜ν•΄μ€˜μ•Όν•¨.
  else if(typeof(obj) === 'object'){
    let answer = '';
    const keys = Object.keys(obj);
    const values = Object.values(obj);
    
    for(let i=0; i<keys.length; i++){
      if(typeof(values[i]) === 'undefined' || typeof(values[i]) === 'function') return '{}';
  
      let newKey = stringifyJSON(keys[i]);
      let newValue = stringifyJSON(values[i]);

      if(i !== 0) answer += ',' + newKey + ":" + newValue;
      else answer += newKey + ':' + newValue;
    }
    return `{${answer}}`;
  }

};