js["1/2/3","/1","/1/2"]格式数据转换成树形结构

const buildtree = (list: any) => {
    const temp = {};
    const tree = [];
    const data = formatData(list);
    for (const i in data) {
        temp[data[i].id] = data[i];
    }
    for (const i in temp) {
        // 如果有父级id
        if (temp[i].pid) {
            if (!temp[temp[i].pid].children) {
                temp[temp[i].pid].children = [];
            }
            // 将父节点与子节点连接起来
            // temp[temp[i].pid].children[temp[i].id] = temp[i];
            temp[temp[i].pid].children.push(temp[i]);
        } else {
            tree.push(temp[i]);
        }
    }
    return tree;
};

// data数据格式为['/1/', '/1/2/', '/1/2/3/']
// 数据以&连接避免有相同的id
const formatData = (data: string[]) => {
    return data.map((x) => {
        const item = x.split("/");
        item.pop(); // 去掉最后一项空元素
        const title = item.slice(-1)[0];
        if (item.length !== 2) {
            return {
                path: item.join("/"),
                id: item.pop() + "&" + item.join("/"), // 防止出现相同的id
                pid: item.pop() + "&" + item.join("/"),
                title: title,
                value: title,
                key: title,
            };
        } else {
            return {
                path: item.join("/"),
                id: item.pop() + "&" + item.join("/"),
                pid: "",
                title: title,
                value: title,
                key: title,
            };
        }
    });
};
posted @   凉都羊肉粉  阅读(326)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示