美文网首页
递归实现树结构

递归实现树结构

作者: 贪恋冬天的幸福 | 来源:发表于2019-10-26 12:53 被阅读0次

    JS递归算法实现 数组树结构

    1. 根节点只有一个
    function retrieve(arr) {
      //找出根节点
      let root = arr.find((val) => val.parent_id === null);
      return recursion(root, arr);
    }
    
    function recursion(element, arr) {
      let id = element.id;
      let childrens = arr.filter(v => v.parent_id === id);
      //如果存在子节点,对子节点进行递归算法
      childrens.length && childrens.forEach((v) => recursion(v, arr));
      //获取当前元素在数组中的所有子节点
      element.children = element.children ? element.children.concat(childrens) : [...childrens]
    }
    
    //将此数组转为树结构对象
    let tree = retrieve([
       {id: 1, parent_id: null}, 
       {id: 2, parent_id: 1}, 
       {id: 3, parent_id: 1}, 
       {id: 4, parent_id: 2}, 
       {id: 5, parent_id: 4}]
    );
    console.log(tree);
    

    得到树结构如下:


    根节点对象

    2.多个根节点
    上例是指定只有一个根节点,可以快捷地找出父节点下的子节点,现在将上面例子改为 通用算法

    function recursion(arr, id) {
      return Array.isArray(arr) && arr.filter((v) => v.parent_id === id).map((v) => ({...v, children: recursion(arr, v.id)}))
    }
    
    let tree = recursion([
       {id: 1, parent_id: null}, 
       {id: 2, parent_id: null}, 
       {id: 3, parent_id: 1}, 
       {id: 4, parent_id: 2}, 
       {id: 5, parent_id: 4}], null);
    console.log(tree);
    

    得到树结构数组:


    根节点数组

    相关文章

      网友评论

          本文标题:递归实现树结构

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