树结构扁平化
const flatTree = (data, childName = 'children') => {
if (!Array.isArray(data)) {
console.warn('只支持传入数组')
return []
}
return data.reduce((prev, curt) => {
const childs = curt[childName]?.length ? flatTree(curt[childName]) : []
return [...prev, curt, ...childs]
}, [])
}
const generateArr = [
{
id: '001',
name: '节点1',
children: [
{
id: '0011',
name: '节点1-1',
children: [
{
id: '00111',
name: '节点1-1-1'
}
]
}
]
},
{
id: '002',
name: '节点2'
}
]
console.log(flatTree(generateArr))
偏平数组树状化
const generateTree = (data, parentId, { idName = 'id', parentIdName = 'parentId', childName = 'children' } = {}) => {
if (!Array.isArray(data)) {
console.warn('只支持传入数组')
return data
}
return data.reduce((prev, curt) => {
if (curt[parentIdName] === parentId) {
const children = generateTree(data, curt[idName])
if (children?.length) {
curt[childName] = children
}
return [...prev, curt]
}
return prev
}, [])
}
const flatArr = [
{ 'id': '001', 'name': '节点1' },
{ 'id': '0011', 'parentId': '001', 'name': '节点1-1' },
{ 'id': '00111', 'parentId': '0011', 'name': '节点1-1-1' },
{ 'id': '002', 'name': '节点2' }
]
console.log(generateTree(flatArr))