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));

#前端##笔试题目##春招##广州视源电子科技股份有限公司#
全部评论
function convert(data) { const m = new Map(); data.forEach(node => { m.set(node.id, node); node.children = []; }); data.forEach(node => { const parent = m.get(node.parentId); if (parent) { parent.children.push(node); } }); }用map保存节点和id,O(n)搞定
点赞 回复 分享
发布于 2019-03-02 23:25
emm,才知道Function.prototype居然是一个函数。。。。
点赞 回复 分享
发布于 2019-03-02 22:07
谁知道代码怎么格式化么,粘贴上来不带格式,大家将就看。。。
点赞 回复 分享
发布于 2019-03-02 21:52

相关推荐

是每个人事都这样与找工作的人这样沟通吗?正常询问不可以吗
超时空记忆丶:这种人适合跟我聊 我能骂得她心里难受一天,这种byd一看就是欠骂,这么好的机会楼主别错过。
点赞 评论 收藏
分享
就在我现在公司的隔壁每天经过都唏嘘不已(就是羡慕)什么时候可以到这里上班啊
柯基在debug:从大学毕业投简历到现在了,应届的时候我都面到终面了,现在工作四年了连简历初筛都过不了了
投递莉莉丝游戏等公司8个岗位 >
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 15:07
点赞 评论 收藏
分享
评论
5
20
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务