平铺数据组装Tree

平铺数组 组装成tree结构数据

/**
 * @description 平铺的数组数据 组装成树结构数据
 * @param {array} data 平铺的数组
 * @param {string|number} rootId 根节点id
 */
export function generateTree(
    data,
    { idName = 'id', parentIdName = 'parentId', childName = 'children' } = {},
    rootId
) {
    if (!Array.isArray(data)) {
        return data
    }
    const objMap = {}
    const result = []
    for (const item of data) {
        const id = item[idName]
        const parentId = item[parentIdName]

        // 该项已经放入map中
        objMap[id] = !objMap[id] ? item : { ...item, ...objMap[id] }
        const treeItem = objMap[id]

        if (parentId === rootId) {
            result.push(treeItem)
        } else {
            // 若父元素不存在 初始化父元素
            if (!objMap[parentId]) {
                objMap[parentId] = {}
            }
            // 若无该根元素则放入map 中
            if (!objMap[parentId][childName]) {
                objMap[parentId][childName] = []
            }
            objMap[parentId][childName].push(treeItem)
        }
    }
    return result
}
posted @ 2022-08-03 15:45  卑面派对  阅读(126)  评论(0编辑  收藏  举报