์žฌ๊ท€, JSON ๐Ÿ“–

forhreverยท2023๋…„ 2์›” 20์ผ
0

๐Ÿ“ข ์žฌ๊ท€ ํ•จ์ˆ˜

์žฌ๊ท€ ํ•จ์ˆ˜๋ž€ ? ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•œ ์ƒํ™ฉ

  • ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ๋น„์Šทํ•œ ๊ตฌ์กฐ์˜ ๋” ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
  • ์ค‘์ฒฉ๋œ ๋ฐ˜๋ณต๋ฌธ์ด ๋งŽ๊ฑฐ๋‚˜ ๋ฐ˜๋ณต๋ฌธ์˜ ์ค‘์ฒฉ ํšŸ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ
  • ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

์ฝ”๋“œ ๊ตฌํ˜„ํ•˜๊ธฐ

  • ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ์ชผ๊ฐœ๋Š” ๊ฒƒ โ‡’ recursive case
  • ์žฌ๊ท€์˜ ํƒˆ์ถœ ์กฐ๊ฑด โ‡’ base case
function arrSum(arr) {
// base case : ๋ฌธ์ œ๋ฅผ ๋” ์ด์ƒ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ (์žฌ๊ท€์˜ ๊ธฐ์ดˆ)
  if (arr์˜ ๊ธธ์ด๊ฐ€ 0์ธ ๊ฒฝ์šฐ) {
    return 0;
  }

  // recursive case : ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ
  return ์š”์†Œ1 + arrSum([์š”์†Œ2, ... , ์š”์†Œn]);
}

๐Ÿ“ข JSON

JavaScript Object Notation์˜ ์ค„์ž„๋ง
๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด ํ˜•ํƒœ์˜ ํฌ๋งท์ด๋‹ค.

์ „์†ก ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด (transferable condition)

  • ์ˆ˜์‹ ์ž(reciever)์™€ ๋ฐœ์‹ ์ž(sender)๊ฐ€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋˜๋Š”, ๋ฌธ์ž์—ด์ฒ˜๋Ÿผ ๋ฒ”์šฉ์ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

JSON.stringify : ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
stringify๊ณผ์ • - ์ง๋ ฌํ™”(serialize)

let getMessage = JSON.stringify(message)
console.log(getMessage) 
// `{"name" : "kimcoding", "message" : "hello"}`
console.log(typeof(getMessage))
// `string`

JSON.parse : JSON์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
JSON.parse๊ณผ์ • - ์—ญ์ง๋ ฌํ™”(deserialize)

let output = `{"name" : "kimcoding", "message" : "hello"}`
let obj = JSON.parse(output)
console.log(obj)
/*
 * {
 * name: "kim",
 * message: "hello",
 * }
 */
 console.log(typeof(obj))
 // `object`

๊ณผ์ œ1 - JSON.stringify ๐Ÿ”

function stringifyJSON(obj) {
  // your code goes here
  // 1. number, boolean, null 
  // 2. string
  // 3. ๋ฐฐ์—ด [] array 
  // 4. ๊ฐ์ฒด {} object
  if(typeof obj === "number" || typeof obj === "boolean" || obj === null) {
    return `${obj}`;
  }
  if(typeof obj === "string") {
    return `"${obj}"`;
  }
  if(Array.isArray(obj) === true) {
    let result = '';
    for(let i of obj) {
      result = result + stringifyJSON(i) + ",";
    }
    result = result.slice(0, result.length -1); // ๋งˆ์ง€๋ง‰ ์‰ผํ‘œ ์ง€์šฐ๊ธฐ
    return `[${result}]`;
  }
  if(typeof obj === 'object') {
    let result = ''; 
    for(let i in obj) {
      if(typeof obj[i] === 'function' || obj[i] === undefined) {
        return "{}";
      }
      result = result + stringifyJSON(i) + ":" + stringifyJSON(obj[i]) + ",";
    }
    result = result.slice(0, result.length -1) // ๋งˆ์ง€๋ง‰ ์‰ผํ‘œ ์ง€์šฐ๊ธฐ
    return `{${result}}`; 
  }
};


๊ณผ์ œ2 - Tree UI โ˜•

html๊ตฌ์กฐ

const root = document.getElementById('root');
function createTreeView(menu, currentNode) {
  // TODO: createTreeView ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
  // li 
  // input - checkbox
  // span - name
  // ul 

  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);
    }
  }
};


ํ•™์Šต์„ ๋งˆ์น˜๊ณ  ๋‚˜์„œ, ๐Ÿ“–

์ฒ˜์Œ์— ๋„ˆ๋ฌด ๋‹นํ™ฉํ–ˆ๋‹ค. ๊ฐœ๋…์„ ๋ด๋„ ์ดํ•ด๋ฅผ ๋ชป ํ•˜์˜€๋Š”๋ฐ, ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์— ๋†“์—ฌ ๊ฑฑ์ •์ด ๋งŽ์ด ๋“ค์—ˆ๋‹ค. ์˜ค๋Š˜ ์•ˆ์— ๋‹ค ํ•  ์ˆ˜ ์žˆ์„์ง€.. ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰์„ ํ•ด๋ณด๊ธฐ๋„ ํ•˜๊ณ  ํŽ˜์–ด์™€ ์„œ๋กœ ๊ณต์œ ํ•˜๋ฉด์„œ ์–ด์ฐŒ์–ด์ฐŒ ํ’€์–ด๋ƒˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์šฐ๊ฒŒ ๋ผ์„œ ์ƒˆ๋กญ์ง€๋งŒ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด๋ผ ๋ณต์Šต์„ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์žฌ๊ท€ ๊ด€๋ จ๋œ ์ฝ”ํ…Œ ๋ฌธ์ œ๋ฅผ ๊ณต์œ  ๋ฐ›์•„ ๋”ฐ๋กœ ํ’€์–ด๋ณผ ์˜ˆ์ •์ด๋‹ค.

profile
๊ฐœ๋ฐœ์ž ์„ฑ์žฅ ๊ณ„๋‹จ ์˜ฌ๋ผ๊ฐ€๊ธฐ

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