美文网首页
数组整理 有childs

数组整理 有childs

作者: 汉木棉花 | 来源:发表于2020-04-01 18:05 被阅读0次

数组原型:

[

     {"id":2,"pid":0,"name":"\u6559\u80b2\u90e8-\u53cc\u4e00\u6d41-\u5b66\u79d1\u7ec4"},

     {"id":1,"pid":0,"name":"\u6559\u80b2\u90e8-\u53cc\u4e00\u6d41-\u6821\u672c\u90e8"},    

    {"id":3,"pid":1,"name":"A00"},

    {"id":14,"pid":2,"name":"A01"},

   {"id":4,"pid":1,"name":"A01"},

    {"id":5,"pid":1,"name":"A02"},

   {"id":15,"pid":2,"name":"A02"},

    {"id":6,"pid":1,"name":"A03"},

    {"id":16,"pid":2,"name":"A03"},

    {"id":7,"pid":1,"name":"A04"},

    {"id":17,"pid":2,"name":"A04"},

      {"id":18,"pid":2,"name":"A05"},

    {"id":8,"pid":1,"name":"A05"},

     {"id":9,"pid":1,"name":"A06"},

     {"id":10,"pid":1,"name":"A07"},

    {"id":11,"pid":1,"name":"A08"},

   {"id":12,"pid":1,"name":"A09"},

     {"id":13,"pid":1,"name":"A10"}]

js

function createMenu(jsonData, pid) {

  function deepCopy(arr) {

    return JSON.parse(JSON.stringify(arr));

  }

  function arr2tree(arr, father) {

    // 遍历数组,找到当前father的所有子节点

    var pid = typeof(father.id) != "undefined" ? father.id : 0;

    for (var i = 0; i < arr.length; i++) { 

      if (arr[i].pid == pid) {

        // 这里是有子节点才需要有node属性(也就是说有node里绝不会为空list)

        if (!father.childs) {

          father.childs = [];

        }

        var son = arr[i];

        father.childs.push(son);

        arr.splice(i, 1); // 删除该节点,当list为空的时候就终止递归

        i--; // 由于删除了i节点,所以下次访问的元素下标应该还是i

      }

    }

    // 再对每一个子节点进行如上操作

    if (father.childs) { // 需要先判断有没有子节点

      var childs = father.childs;

      for (var i=0; i<childs.length; i++) {

        arr2tree(arr, childs[i]); // 调用递归函数

      }

      // 用于按名称进行排序,如果不强调顺序可以去掉

      father.childs.sort(function (a, b) {

        return a.name > b.name;

      })

    }

  }

 

  var data = {id: 0}, arr = deepCopy(jsonData); // 拷贝一份,避免对原数组进行修改

  arr2tree(arr ,data);

  var ul = '<div class="cd-dropdown-wrapper">';

}

相关文章

网友评论

      本文标题:数组整理 有childs

      本文链接:https://www.haomeiwen.com/subject/wwwauhtx.html