如何把数组处理成tree型结构

1 将数组处理成tree结构
let treeData = [{
id: 1,
pid: 0,
name: '中国'
},{
id: 2,
pid: 0,
name: '美国'
},
{
id: 3,
pid: 1,
name: '上海'
},
{
id: 4,
pid: 1,
name: '深圳'
},
{
id: 5,
pid: 4,
name: '宝安区'
},
{
id: 6,
pid: 4,
name: '龙岗区'
},
{
id: 7,
pid: 1,
name: '北京'
}]
// 对数组结构处理,处理成tree结构
function transformTree (treeData, rootVal) {
// 先找一级树根
let result = []
treeData.forEach(item => {
if (item.pid === rootVal) {
result.push(item)
// 找到该项的一级,在找该项的次级(一级的id 为次级的pid)
let chidlren = transformTree(treeData, item.id)
chidlren.length && (item.chidlren = chidlren)
}
})
return result
}
// 树结构,要先找根,pid 为 0 或者 -1 一般都为树根
transformTree(treeData, 0)
2.tree结构进行过滤,返回需要的tree结构
场景: 对文件夹进行处理,只返回.jar类型的文件
function filterTree (array) {
for (let item of array) {
if (item.chidlren) {
item.chidlren = filterTree(item.chidlren)
}
}
return array.filter(item => (/.jar$/.test(item.name) && item.children.length === 0) || (!(/.jar$/.test(n.name)) && item.chidlren.length > 0 ))
}

3.对tree结构children.length 为 0 时,删除该children字段
function treeData (arr) {
arr.forEach(item => {
item.chidlren === null || item.chidlren === undefined || item.chidlren.length === 0 ? operateTree(item) : treeData(item.chidlren)
})
}

function operateTree (item) {
delete item.chidlren
}

treeData(treeArr)

posted @ 2022-08-10 21:35  小白张先生  阅读(279)  评论(0)    收藏  举报