平铺数组 组装成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
}