cvte前端最后一道建树笔试题
笔试时候没想出来,参考了stackoverflow上面的一个答案,自己改了改,满足了题目要求,把代码分享一下。题目要求就是给定如下形式的父子关系数组,转为有树结构,节点数据结构是一个对象,包含val和id属性, 以及一个children数组。
let data = [{id: 3, val: '3', parentId: 1},{id: 2, val: '2', parentId: 0},{id: 5, val: '5', parentId: 2},{id: 6, val: '6', parentId: 2},{id: 4, val: '4', parentId: 1},{id: 1, val: '1', parentId: 0},]function treeish(arr, parent) {if(!parent) parent = {id: 0, val: '0'};let children = arr.filter(obj => obj.parentId === parent.id);children = convert(children)parent.children = children;if(children.length !== 0) {children.forEach(child => treeish(arr, child));}return parent;}function convert(children) {return children.map(child => {delete child.parentId;child.children = [];return child;});}console.info(treeish(data));
#前端##笔试题目##春招##广州视源电子科技股份有限公司#