树形结构转换
[2.平地起高楼 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/5143/learning/?page=1&first_category_id=2&second_category_id=11&sort=difficulty&asc=0)
两种方法,递归和不递归:
js
function formatDataTree(data, rootId = '0') {
let parents = data.filter((p) => p.pid == rootId);
let children = data.filter((c) => c.pid != rootId);
dataToTree(parents, children)
return parents;
}
function dataToTree(parents, children) {
parents.map((p) => {
children.map((c, i) => {
if (c.pid == p.id) {
if (!p.children) p.children = [];
p.children.push(c);
const _children = JSON.parse(JSON.stringify(children));
_children.splice(i, 1);
dataToTree([c], children);
}
})
})
return parents;
}
js
function formatDataTree(data, rootId = '0') {
const _data = JSON.parse(JSON.stringify(data));
_data.map((p) => {
const _arr = _data.filter((c) => c.pid == p.id);
_arr.length && (p.children = _arr);
})
const parents = _data.filter(item => item.pid == rootId);
return parents;
}
不要过于沉浸在把代码变得“优雅”,完成功能即可!