js 扁平化数组转化为树形结构

483 阅读1分钟
   const array = [
       { id: 1, value: "菜单1", p_id: null },
       { id: 2, value: "菜单2", p_id: 1 },
       { id: 3, value: "菜单3", p_id: 1 },
       { id: 4, value: "菜单4", p_id: 2 },
       { id: 5, value: "菜单5", p_id: null },
       { id: 6, value: "菜单6", p_id: 5 },
       { id: 7, value: "菜单7", p_id: null },
       { id: 8, value: "菜单8", p_id: 6 }
   ]
   
   const changeArr = (arr) => {
        return arr.reduce((prev, cur) => {
            let findItem = arr.find(item => item.id === cur.p_id);
            if(findItem) {
                //是否存在children
                findItem.children ?. length ? findItem.children.push(cur) : findItem.children = [cur];
            }else {
                prev.push(cur);
            }
            return prev;
        }, [])
    }
    
    let newArr = changeArr(array);
    console.log(newArr)