Make life easy
, looooong. , if .
, if/else. , runnable demo
(), val {}, l r - . , :
const makeTree = ({val, l, r}) => {
if (val === undefined)
return []
else
return [Node('ul', Node('li', Link('#', val)), ...makeTree(l), ...makeTree(r))]
}
, Node Link. , , makeTree , . , - HTML. makeMenu - , , node .toElem()
const makeMenu = data =>
makeTree(data)[0].toElem()
, .toElem node Node Link. , , , , , (), .
Node Link
Node Link. . Node - HTML- type, ; , .toElem. Link href text .
const Node = (type, ...children) => ({
toElem: () => {
const elem = document.createElement(type)
children.forEach(child => elem.appendChild(child.toElem()))
return elem
}
})
const Link = (href, text) => ({
toElem: () => {
const elem = document.createElement('a')
elem.setAttribute('href', href)
elem.textContent = text
return elem
}
})
const Node = (type, ...children) => ({
toElem: () => {
const elem = document.createElement(type)
children.forEach(child => elem.appendChild(child.toElem()))
return elem
}
})
const Link = (href, text) => ({
toElem: () => {
const elem = document.createElement('a')
elem.setAttribute('href', href)
elem.textContent = text
return elem
}
})
const makeTree = ({val, l, r}) => {
if (val === undefined)
return []
else
return [Node('ul', Node('li', Link('#', val)), ...makeTree(l), ...makeTree(r))]
}
const makeMenu = data =>
makeTree(data)[0].toElem()
const data = { "val": 2, "l": { "val": 1, "l": {}, "r": {} }, "r": { "val": 4, "l": {}, "r": { "val": 5, "l": {}, "r": {} } } }
document.body.appendChild(makeMenu(data))
Hide result