Achievement Goals
- JSON 구조가 재귀 함수를 사용할 수 있는 Tree 구조임을 이해할 수 있다. (stringifyJSON)
- JSON.stringify 와 JSON.parse 가 seriealize, deserialize라는 것을 이해할 수 있다.
- JSON.stringify 와 JSON.parse 를 사용하여 자바스크립트 값과 JSON을 넘나들 수 있다.
- JSON에 재귀 호출을 사용할 때, 어디에 사용해야 할지 이해할 수 있다.
StringifyJSON 구현
function stringifyJSON(obj) {
if(typeof obj==='number'|| obj=== null || typeof obj==='boolean'){
return `${obj}`
}
if(typeof obj === 'string'){
return `"${obj}"`
}
if(Array.isArray(obj)){
if(obj.length===0){
return '[]'
}else{
const arr=[]
for(let i of obj){
arr.push(stringifyJSON(i))
}
return `[${arr}]`
}
}
if(Object.keys(obj).length===0){
return '{}'
}else{
const objarr=[]
for(let i in obj){
if(typeof obj[i]==='function' ||typeof obj[i]==='undefined') {
continue
}
objarr.push(stringifyJSON(i)+':'+stringifyJSON(obj[i]))
}
return `{${objarr}}`
}
};
Tree UI 구현
function createTreeView(menu, currentNode) {
if(!('children' in menu[0])){
for(let i of menu){
const li = document.createElement('li')
li.textContent=i.name
currentNode.append(li)
}
}else if('children' in menu[0]){
for(let i of menu){
const li=document.createElement('li')
const span=document.createElement('span')
const input=document.createElement('input')
const ul=document.createElement('ul')
input.setAttribute('type','checkbox')
span.textContent=i.name
currentNode.append(li)
li.append(input,span,ul)
createTreeView(i.children,ul)
}
}
}