JavaScript:使用递归构建树型菜单

使用递归函数将扁平数据转为树型结构,并渲染到页面

效果图:

代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>递归函数处理数据</title>
</head>

<body>
  <div class="nav" style="background-color: pink;">
  </div>
  <script>
    var data = [
      { id: 1, name: '衣服', pid: 0 },
      { id: 2, name: '裤子', pid: 0 },
      { id: 3, name: '外套', pid: 1 },
      { id: 4, name: '短裤', pid: 2 },
      { id: 5, name: '风衣', pid: 3 }
    ]
    function filterArray(data, parent){
      let temp = []
      for (let i = 0; i < data.length; i++) {
        if (data[i].pid === parent) {
          temp.push(data[i])
          data[i].children = filterArray(data, data[i].id) //返回值是一个数组,又赋值给data[i].children
        }
      }
      return temp
    }
    let tree=filterArray(data,0)

    let nav = document.querySelector('.nav');
    function setDomTree(data, node) {
      let ul
      for (let i = 0; i < data.length; i++) {
          ul = document.createElement('ul')
          let li = document.createElement('li')
          li.innerHTML = data[i].name
          node.appendChild(ul)
          ul.appendChild(li)
          if (data[i].children.length !== 0) {
              let element = setDomTree(data[i].children, ul)
              ul.appendChild(element)
          }
      }
      return ul
    }
    setDomTree(tree,nav)
  </script>
</body>

</html>

猜你喜欢

转载自www.cnblogs.com/xinhej/p/13376736.html