Skip to content

树形结构转换

[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;
}

不要过于沉浸在把代码变得“优雅”,完成功能即可!