//一维转多维数组递归方法
function arrayToTree(array = [], keyMap = {}) {
const newArray = [...array];
const {
KEY_ID = 'id', KEY_PID = 'pid', KEY_CHILDREN = 'children', KEY_PARENTID = ''
} = keyMap;
const newList = [];
for (let i = 0; i < newArray.length; i++) {
if (newArray[i][KEY_PID] === KEY_PARENTID) {
//获取最顶层元素,它的父节点ID=0
newList.push(newArray[i]);
} else {
const parent = newArray.find((item) => {
return item[KEY_ID] === newArray[i][KEY_PID];
}); // 获取当前节点的父节点
if (parent) {
// 把当前节点 加入到 父节点中
if (parent[KEY_CHILDREN]) {
parent[KEY_CHILDREN].push(newArray[i]);
} else {
parent[KEY_CHILDREN] = [newArray[i]];
}
}
}
}
return newList;
}
//多维数组转一维数组递归方法
const treeToFlat = (treeList = [], flatList = [], children = 'items') => {
if (flatList.length > 9999) {
return []
}
treeList.forEach((e) => {
flatList.push(e)
if (e[children] && e[children].length) {
treeToFlat(e[children], flatList, children)
}
})
return flatList
}
arrayToTree('一维数组', {
KEY_ID: 'id',//数据id
KEY_PID: 'parentId',//数据的父级id
KEY_CHILDREN: 'items',//递归的数组
KEY_PARENTID: v.id,//第一级数的id
}),
treeToFlat('多维数组', [], 'items')