起因
情况是这么个情况,最近公司在招人,然后我们前端leader负责面试,她出了一道编程题,题目是这样的
- 请书写两种方法,方法一:将以下数据源处理成树形结构,方法二:将树形结构数据源进行扁平化操作
let arr =[
{"id": 1, "parent_id": 0, "name": "Atar"},
{"id": 2, "parent_id": 0, "name": "Lier"},
{"id": 3, "parent_id": 0, "name": "广东省"},
{"id": 11, "parent_id": 1, "name": "顺义区"},
{"id": 12, "parent_id": 1, "name": "朝阳区"},
{"id": 13, "parent_id": 1, "name": "lili"},
{"id": 21, "parent_id": 2, "name": "sdfsd"},
{"id": 22, "parent_id": 2, "name": "X"},
{"id": 24, "parent_id": 2, "name": "(iLX"},
{"id": 241, "parent_id": 24, "name": "田林街道"},
{"id": 242, "parent_id": 24, "name": "漕河泾街道"},
{"id": 2421, "parent_id": 242, "name": "上海科技绿洲"},
{"id": 2422, "parent_id": 242, "name": "漕河泾开发区"},
{"id": 31, "parent_id": 3, "name": "~Ni"},
{"id": 32, "parent_id": 3, "name": "it"},
{"id": 33, "parent_id": 3, "name": "I"}
];
然后就是这样一个简单的编程题,leader面完试回来之后说,今天的两位候选人都没有做出来,然后同事就问了一下工作年限,leader说都是工作5-7年的,我当时也很纳闷,我自认为也很简单,只要通过parent_id去判断,然后做成树结构就行,扁平化的话用children加递归处理即可
想法很完美,现实很残酷,抱着这样的思路我自己去尝试了一下
- 代码演示
// 将数组进行扁平化
function treeToArr(arr){
let newArr = [];
function flatArr(childrenArr){
if(Array.isArray(childrenArr) && childrenArr.length > 0){
childrenArr.map((item)=>{
if(item.children.length > 0){
flatArr(item.children)
}
newArr.push({...item})
})
}else{
return childrenArr
}
}
flatArr(arr)
return newArr.map((item)=>{
delete item.children
return item
})
}
// 数组转换为树结构
function arrToTree(arr){
if(Array.isArray(arr) && arr.length > 0){
let childrenIndex = []; // 已存的所有children的索引
let newArr = arr.map((item)=>{
let children;
children = arr.filter((childrenItem,index)=>{
if(item.id == childrenItem.parent_id && childrenIndex.indexOf(index) == -1) {
childrenIndex.push(index)
}
return item.id == childrenItem.parent_id
})
item.children = children
return item
})
return newArr.filter((item,index)=>{
return childrenIndex.indexOf(index) == -1
});
}else{
return arr
}
}
console.log("#####111",arrToTree(arr));
console.log("#####2222",treeToArr(arrToTree(arr)));
就这样简单的一个需求,我做了一个半小时还多,而且做出来的只是勉强完成要求,真的是gpt用久了独立去写一些东西的时候人都傻了,不是这出点小问题就是那出点小问题,同时这也是我现在脑子里想到的唯一的一种处理方式,作为一个从业三年的我来说这个水平实属菜了
出现的问题
- 一开始做的第一版树结构扁平化递归适用不当会将已有的children继续塞进数组里,出现大量重复数据
- 将数组处理成树结构忘记把已经归档到children下的数据删除,导致结构化后数据仍然是16条与原数组长度一致
最后
记录一下自己出现的问题,希望下次自己再遇到类似的问题不会再处理那么久,不知道各位大佬遇到这样的题目需要做多久呢