emmmm题目的大概意思就是将下列数据:
var data = [{ parentId: 0, id: 1, value: '1' }, { parentId: 3, id: 2, value: '2' }, { parentId: 0, id: 3, value: '3' }, { parentId: 1, id: 4, value: '4' }, { parentId: 1, id: 5, value: '5' }]
转为这样的一个结构的数据:
[
{
id: 0,
childrens: [
{
parentId: 0,
id: 1,
value: '1',
childrens: [
{
parentId: 1,
id: 4,
value: '4'
},
{
parentId: 1,
id: 5,
value: '5'
}
]
},
{
parentId: 0,
id: 3,
value: '3',
childrens: [
{
parentId: 3,
id: 2,
value: '2'
}
]
}]
}
]
大概的意思就是这样
怎么做呢?第一种是通过递归的方式,一层层的去找孩子,这样的方式时间复杂度太高。有没有一种时间复杂度较低的方式呢?那肯定是有的。
思路:我们知道如果hash表读取的数据是很快的。我们可以把这个数组构建一个hash对象,然后遍历数组,给对应parentId的对象添加孩子就好了
话不多说上代码。
const convert = (list) => {
const map = list.reduce((res,v)=>{
res[v.id] = v;
return res;
},{})
const res = [];
for(let item of list){
if(item.parentId === 0){
res.push(item);
continue;
}
if(item.parentId in map){
const parent = map[item.parentId];
parent.children = parent.children || [];
parent.children.push(item);
}
}
return res;
}
好像挺简单的但是我当时就是没有做出来。太菜了。。。。。。。。