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

相关推荐

07-04 21:23
已编辑
东莞城市学院 后端
秋招和春招只收到几个中大厂的笔试,本人比较菜,感觉大厂的笔试太难,算法题不能全部做出来就没过了,但是CVTE和小天才的感觉不是很难,基本上都做出来了,笔试还是挂了。Boss上投了Java后端开发都没有回音,boss上有面试机会都是C#工控软件开发方向的,但是这个方向不太懂,资料又少,面试的表现有点差,现在还是想看看Java这边,面试的时候比较有把握点。想请教一下,这份简历还有什么问题,一直没什么机会,还有什么地方要修改的。
程序员小白条:学历太差,民办和公办,外包还得区分的,这个学历+这个简历,没的办法,除非你有人脉,太难了,这环境,何况你都毕业了,连一段实习都没,肯定没公司会挑选了,没竞争力,开发才招几个人,跟你竞争的可不是二本,三本的人哦,何况你在二本,三本里面也排名不高
投递小天才等公司7个岗位
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
评论
5
20
分享

创作者周榜

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