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 @ 2022-02-25 17:06  凉都羊肉粉  阅读(333)  评论(0)    收藏  举报