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
谁知道代码怎么格式化么,粘贴上来不带格式,大家将就看。。。
点赞 回复
分享
发布于 2019-03-02 21:52
滴滴
校招火热招聘中
官网直投
emm,才知道Function.prototype居然是一个函数。。。。
点赞 回复
分享
发布于 2019-03-02 22:07

相关推荐

5 20 评论
分享
牛客网
牛客企业服务