数组转 tree 实现方式,js版本实现了三种

let arr = [{name: "李四", id: 2, pid: 0},//  []
    {name: "王五", id: 3, pid: 0}, // []
    {name: "赵六", id: 4, pid: 3}, // []
    {name: "吗六", id: 9, pid: 3}, // []
    {name: "张三", id: 7, pid: 9}, // []
    {name: "张五", id: 10, pid: 4}, // []
]
  1. 递归模式

    /**
     * 递归模式,数组转tree
     * @param arr 目标数组
     * @param pid 第一级 目标id
     * @returns {*[]} tree
     * [
     *   { name: '李四', id: 2, pid: 0, children: [] },
     *   { name: '王五', id: 3, pid: 0, children: [ [Object], [Object] ] }
     * ]
     * @constructor
     */
    function ArrayToTree(arr, pid = 0) {
     // 判断是否是数组 不是数组就返回 []
     if (!Array.isArray(arr) || !arr.length) return [];
     let newArr = []
     arr.forEach(item => {
         // 判断 当前item.pid 和 传入的pid 是否相等,相等就push 进去
         if (item.pid == pid) {
             newArr.push({
                 ...item, children: ArrayToTree(arr, item.id)
             })
         }
     })
     return newArr
    }

标签: none

添加新评论