原始數(shù)據(jù)
節(jié)點的id 和可以確定父子關系的 parentId
const treeData = [
{
id: '1',
parentId: '',
name: '紅——水果',
identity: '紅方'
},
{
id: '1-1',
name: '紅-水果-紅色的',
identity: '紅方',
parentId: '1'
},
{
id: '1-1-1',
name: '紅-水果-紅色的-蘋果',
identity: '紅方',
parentId: '1-1'
},
{
id: '1-2',
name: '紅-水果-綠色的',
identity: '紅方',
parentId: '1'
},
{
id: '1-2-1',
name: '紅-水果-綠色的-西瓜',
identity: '紅方',
parentId: '1-2'
}
]
listTotree
function buildTree(data, parentId = '') {
const tree = []
for (const item of data) {
if (item.parentId === parentId) {
const children = buildTree(data, item.id)
if (children.length) {
item.children = children
}
tree.push(item)
}
}
return tree
}
treeToList
function flattenTree(tree, result = []) {
for (const node of tree) {
const { id, parentId, children, ...rest } = node
result.push({ id, parentId, ...rest })
if (children) {
flattenTree(children, result)
}
}
return result
}
const flatData = flattenTree(treeData)
console.log(flatData)
tree結構數(shù)據(jù) 過濾
過濾條件:node節(jié)點中 type质礼!==100|| xslx===2
const formatTree=(data) => {
return data.filter(item => {return item.Type!=='100'||item.xslx==='2'}).map(item => {
item=Object.assign({},{...item})
if(item.children) item.children=formatTree(item.children)
})
}
tree節(jié)點 過濾成扁平數(shù)組
過濾葉子節(jié)點
function findLeafNodes(nodes: ChatTreeOption[], result: ChatTreeOption[]) {
for (let i = 0; i < nodes.length; i++) {
let node = nodes[i]
if (node.isLeaf) {
result.push(node); // 如果當前節(jié)點是葉子節(jié)點权埠,則把當前節(jié)點的信息存入result列表
}
else {
if (node.children) {
for (let i = 0; i < node.children.length; i++) {
findLeafNodes(node.children, result); // 遞歸調(diào)用子節(jié)點谆吴,查找所有葉子節(jié)點
}
}
}
}
}