本文已参与「 新人创作礼 」活动,一起开启掘金创作之路
又来日更的一天了,其实也不知道写啥,但是我自己曾经的题库也是不少,有自己面试别人的,也有被别人面试总结的。
下面这道题是我在掘金看到的,也听人问过我,说是一个资深前端开发工程师肯定会的一道题。
其实通过一套题在有限的时间去测试一个人,有点牵强。
如果能够快速的写出来,当然有一定的代码经验,或者是在面试上有过准备。
无可厚非,无论怎么样选拔都是面试官筛选人才的一种方式。
这个题目其实还是比较简单,但是还是有几个知识点
1. JAVASCRIPT内置函数序列、类型判断要理解
2.函数的引用要清楚、HASH记录 ( 快速查找 )
其他的都是日常的工作中都会碰到的一些问题。
/* *以下数据结构中,id 代表部门编号,name 代表部门名称,parentId 是父级部门编 号,parentId为 0 代表一级部门。 * 现在要求: 1: 把树形结构转换成原始list。 2:把原始list重新还原成树形结构。 * 加分项:尽可能降低时间复杂度。 */
// 原始 树形结构 如下
let tree = [
{
id: 1,
name: '部门A',
parentId: 0,
children: [
{
id: 3,
name: '部门C',
parentId: 1,
children: [
{
id: 6,
name: '部门F',
parentId: 3
}
]
},
{
id: 4,
name: '部门D',
parentId: 1,
children: [
{
id: 8,
name: '部门H',
parentId: 4
}
]
}
]
},
{
id: 2,
name: '部门B',
parentId: 0,
children: [
{
id: 5,
name: '部门E',
parentId: 2
},
{
id: 7,
name: '部门G',
parentId: 2
}
]
}
];
// 转换后的结构如下
let list = [
{id:1, name:'部门A', parentId:0},
{id:2, name:'部门B', parentId:0},
{id:3, name:'部门C', parentId:1},
{id:4, name:'部门D', parentId:1},
{id:5, name:'部门E', parentId:2},
{id:6, name:'部门F', parentId:3},
{id:7, name:'部门G', parentId:2},
{id:8, name:'部门H', parentId:4}
];
function convertList(tree) {
let list = [];
function _fn (tree) {
for (let i = 0 , j = tree.length;i <j;i++) {
let item = tree[i]
let {id , name,parentId , children} = item;
list.push({
id , name,parentId,
});
if (children) {
_fn(children)
}
}
}
_fn(tree)
return list;
}
console.log (convertList(tree))
function convertList2 (tree) {
let list = [];
(function (tree){
for (let i = 0 , j = tree.length;i <j;i++) {
let item = tree[i]
let {id , name,parentId , children} = item;
list.push({
id , name,parentId
});
if (children) {
arguments.callee(children)
}
}
})(tree)
return list;
}
console.log (convertList2(tree))
function convertTree(list){
let hash = {};
list.forEach((item)=>{
item.children = []
hash[item.id] = item;
})
for (let i = 0 , j = list.length;i < j;i++) {
let item = list[i]
let {id, parentId} = item;
let refHash = hash[parentId];
if (parentId!=0 && refHash) {
refHash.children.push(item);
}
}
let outputArr = []
for (let i in hash) {
if (hash[i]["parentId"]===0) {
outputArr.push(hash[i])
}
}
return outputArr
}
console.log (JSON.stringify(convertTree(list)[0]))
生活总是那么的无趣,在上海封闭在家,总想整点东西打发时间。工作上因为刚换不久,写代码会比较的多,也还没有去过公司。最近状态也还不错,就多输出一些东西。不过白天还是比较忙,希望可以早点去公司上班。
这个题目线上地址:tool.lu/coderunner/…