[C/F TIL] 42์ผ์ฐจ - JSON.stringify

mu-engยท2023๋…„ 6์›” 12์ผ
1

TIL (in boost camp)

๋ชฉ๋ก ๋ณด๊ธฐ
41/53
post-thumbnail

Code States
Front-end boost camp
Today
I
Learned

๐Ÿฌ 42์ผ์ฐจ, ์›”์š”์ผ!


๐Ÿฌ JSON

  • JavaScript Object Notation : ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด ํ˜•ํƒœ์˜ ํฌ๋งท
  • JSON.stringify : ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. -> ์ง๋ ฌํ™”
  • JSON.parse : JSON์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. -> ์—ญ์ง๋ ฌํ™”
  • JavaScript ๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ ์–ธ์–ด์—์„œ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํฌ๋งท

๐Ÿฌ JSON ๊ธฐ๋ณธ ๊ทœ์น™

  • JavaScript ๊ฐ์ฒด์™€ ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฅธ ๊ทœ์น™ ์กด์žฌ

๐Ÿฌ ํŽ˜์–ด ๊ณผ์ œ 1 - JSON.stringify

  • JSON.stringify๊ฐ€ ์–ด๋–ค์‹์œผ๋กœ ๊ตฌ๋™๋˜๋Š”์ง€ ๋…ธ๊ฐ€๋‹ค๋กœ ํ•จ์ˆ˜ ํ•˜๋‚˜์”ฉ ์ฐ์–ด ํ™•์ธํ•ด๋ณด๋ผ๋Š” ์˜๋ฏธ... ์•„์ฃผ ์–ด๋ ต์ง„ ์•Š์•˜์ง€๋งŒ ์‰ฝ์ง€ ์•Š์•˜๋‹ค.
const { type } = require("express/lib/response");

/**
 * 1. Browser์— ์กด์žฌํ•˜๋Š” JSON.stringfy ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ด…๋‹ˆ๋‹ค.
 * JSON.stringfy ํ•จ์ˆ˜๋Š” input ๊ฐ’์„ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
 * ๋‹จ, undefined์™€ function์€ JSON์œผ๋กœ ์ƒ๋žต๋˜๊ฑฐ๋‚˜ null๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
 *
 * 2. stringfyJSON์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
 * - Boolean์ด input์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๊ฒฝ์šฐ
 * stringifyJSON(true);                // 'true'
 * - String์ด input์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๊ฒฝ์šฐ
 * stringifyJSON('foo');               // '"foo"'
 * - Array๊ฐ€ input์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๊ฒฝ์šฐ
 * stringifyJSON([1, 'false', false]); // '[1,"false",false]'
 * - Object๊ฐ€ input์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๊ฒฝ์šฐ
 * stringifyJSON({ x: 5 });            // '{"x":5}'
 * - undefined, function์ด ์ฃผ์–ด์กŒ์„ ๊ฒฝ์šฐ
 * stringifyJSON(undefined)            // undefined
 * stringifyJSON(function(){})         // undefined
 * stringifyJSON({ x: undefined, y: function(){} })   // '{}'
 *
 * 3. spec/stringifyJSONSpec.js์˜ stringifiableObjects ๋ฐฐ์—ด์„ ์ฐธ๊ณ ํ•ด์„œ ํ…Œ์ŠคํŠธ์—์„œ ์–ด๋–ค input ๊ฐ’๋“ค์ด
 * ์ฃผ์–ด์ง€๊ณ , ์–ด๋–ป๊ฒŒ stringifyํ•ด ์ฃผ์–ด์•ผ ํ• ์ง€ ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”.
 *
 * 4. ๊ทธ๋ƒฅ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ๋ฅผ ํ•˜๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜๋ฉด ๋  ๊ฑฐ์˜ˆ์š”.
 *  const stringifyJSON = JSON.stringify;
 *
 * ํ•˜์ง€๋งŒ ์ด ๊ณผ์ œ์˜ ๋ชฉ์ ์€ ์žฌ๊ท€๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ˆ, ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•ด๋ด์•ผ๊ฒ ์ง€์š”?:
 */

function stringifyJSON(obj) {
  // your code goes here
  if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null) {
    return `${obj}`;
  }
  if (typeof obj === 'string') {
    return `"${obj}"`;
  }
  if (Array.isArray(obj)) {
    let result = "";
    for (element of obj) {
      result += stringifyJSON(element) + ',';
    }
    result = result.slice(0, result.length - 1);
    return `[${result}]`;
  }

  if (typeof obj === 'object') {
    let result = "";
    for (key in obj) {
      if (typeof obj[key] === 'function' || obj[key] === undefined) {
        continue;
      }
      result += stringifyJSON(key) + ":" + stringifyJSON(obj[key]) + ",";
    }

    result = result.slice(0, result.length - 1);
    return `{${result}}`
  }
};

// ๋‹ค์Œ ์ฝ”๋“œ๋Š” ๊ฒฐ๊ณผ ์ œ์ถœ์„ ์œ„ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ์ข‹์Šต๋‹ˆ๋‹ค.
if (typeof window === "undefined") {
  module.exports = stringifyJSON;
}

๐Ÿฌ ํŽ˜์–ด ๊ณผ์ œ 2 - Tree UI

  • ์š”๊ฑด... DOM์œผ๋กœ html์•ˆ์— ์žˆ๋Š” ์š”์†Œ๋“ค์„ ๊ฐ€์ง€๊ณ  ์™€์„œ ์ž์‹์š”์†Œ ์•ˆ์— ์ž์‹์š”์†Œ๊ฐ€ ๋˜ ์žˆ์„ ๊ฒฝ์šฐ ์ฒดํฌ๋ฐ•์Šค ํ˜•์‹์˜ ๋ฆฌ์ŠคํŠธ๋กœ ๊ณ„์†๊ณ„์† ๋ณด์—ฌ์ฃผ๋Š” ํ˜•์‹์ด๋ผ๋Š” ๊ฒƒ ๊นŒ์ง„ ์ดํ•ด๊ฐ€ ๊ฐ€๋Š”๋ฐ, ์™œ li์— append๋ฅผ ํ•˜๋Š”๊ฑด์ง€? currenNode๊ฐ€ ์ •ํ™•ํžˆ ๋ญ˜ ์˜๋ฏธํ•˜๋Š”์ง€? ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋œ๋‹ค. ๋‚ด์ผ ์•„์นจ ์‹ค์‹œ๊ฐ„ ์„ธ์…˜์„ ์ข€ ๋ด์•ผํ•  ๋“ฏ!
const root = document.getElementById('root');
function createTreeView(menu, currentNode) {
  
  for (let i = 0; i < menu.length; i++) {
    const li = document.createElement('li');
    if (menu[i].children) {
      const input = document.createElement('input');
      input.type = 'checkbox';
      const span = document.createElement('span');
      span.textContent = menu[i].name;

      const ul = document.createElement('ul');
      li.append(input, span, ul);
      currentNode.append(li);

      createTreeView(menu[i].children, ul);
    } else {
      li.textContent = menu[i].name;
      currentNode.append(li);
    }
  }
}
createTreeView(menu, root);

๐Ÿฌ ์ข…ํ•ฉํ€ด์ฆˆ ๋ฐ ๊ฐœ๋…์ •๋ฆฌ

  • ์žฌ๊ท€ํ•จ์ˆ˜ : ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜
  • ์žฌ๊ท€์˜ ํƒˆ์ถœ ์กฐ๊ฑด? : base case
  • ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•œ ์ƒํ™ฉ์€?
    -- ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ๋น„์Šทํ•œ ๊ตฌ์กฐ์˜ ๋” ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
    -- ์ค‘์ฒฉ๋œ ๋ฐ˜๋ณต๋ฌธ์ด ๋งŽ๊ฑฐ๋‚˜ ๋ฐ˜๋ณต๋ฌธ์˜ ์ค‘์ฒฉ ํšŸ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ
    -- ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
  • ์ •๋‹ต : (1)arr.length === 0, (2) arr.shift(), (3)arr
    -- shift๋Š” ์›๋ณธ ๋ฐฐ์—ด์—์„œ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๊ทธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜, ์›๋ณธ ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•จ
const arr = [1, 2, 3, 4, 5];

function arrSum(arr) {
  if ( (1)__________ ) {
    return 0;
  }

  return (2)__________ + arrSum( (3)__________ );
}

๐Ÿฌ 42์ผ์ฐจ ์ˆ˜์—…์„ ๋งˆ์น˜๋ฉฐ...

์žฌ๊ท€.. 60ํผ์„ผํŠธ ์ •๋„ ์ดํ•ด๋Š” ์ž˜ ๋˜๋Š”๋ฐ... ์–ด๋–ค ์œ„์น˜์— ์–ด๋–ป๊ฒŒ ์ ์žฌ์ ์†Œ์— ๋„ฃ์–ด์•ผ ํ•˜๋Š”์ง€ ํŒ๋‹จ์ด ์กฐ๊ธˆ ์–ด๋ ต๋‹ค.

profile
[๋ฌด์—ฅ์ผ๊ธฐ] ๋ฌด์—ฅ,,, ๋‚ด๊ฐ€ ๋จธ์จ์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋  ์ˆ˜ ์ด์“ฐ๊นŒ,,,

0๊ฐœ์˜ ๋Œ“๊ธ€