list 转 tree 结构解法案例
list 用例
const treesArr = [{ id: 16, parentId: 0 },{ id: 17, parentId: 0 },{ id: 18, parentId: 16 },{ id: 19, parentId: 18 },{ id: 21, parentId: 19 },{ id: 22, parentId: 21 },{ id: 23, parentId: 17 },{ id: 24, parentId: 17 },]
解法1
/*** @method treesArrToObj 树形数组转化为 object 形式* @param {Arrary} treesArr 树形数组* @param {Object} treesObj 原始树形结构* @return {Object} 树结构*/function treesArrToObj(treesArr = [], treesObj = {}) {if (!treesArr.length) {return treesObj;}// treesObj 不传或为空对象都视为初始化if (!Object.keys(treesObj).length) {treesObj.id = Math.min(...treesArr.map(({ parentId }) => parentId));}const children = treesArr.filter((item, index) => {if (item.parentId === treesObj.id) {// 用过的都清除掉,防止每次递归的时候都要遍历所有元素delete treesArr[index];return item.parentId === treesObj.id;}})if (!children.length) {return treesObj;}treesObj.children = children;// 再次传递的 treesArr 是没用过的treesObj.children.map(item => treesArrToObj(treesArr.filter(item => !!item), item));return treesObj;}
