1.数组转为树状结构
const arr = [{
name:'中国',
id:1,
parentId:0
},{
name:'北京',
id:2,
parentId:1
},{
name:'上海',
id:3,
parentId:1
},{
name:'台湾',
id:4,
parentId:1
},{
name:'钓鱼岛',
id:5,
parentId:4
}]
function toTree(data, key = 'id', parentId = 0) {
let result = []
if (!Array.isArray(data)) {
return result
}
if (data.length == 1) {
return (result = data)
}
data.forEach(item => {
if (item.parentId === parentId) {
item.children = toTree(data, key, item[key])
result.push(item)
}
})
return result
}
console.log(toTree(arr,'id',0))
2.树状结构转为数组
const arr = [{
name:'中国',
id:1,
parentId:0,
children:[{
name:'北京',
id:2,
parentId:1
},{
name:'上海',
id:3,
parentId:1
},{
name:'台湾',
id:4,
parentId:1,
children:[{
name:'钓鱼岛',
id:5,
parentId:4
}]
}]
}]
function* treeToArr(treeArr, children = 'children', deleteChildren = true) {
for (let item of treeArr) {
let newItem = deepClone(item)
if(deleteChildren)
delete newItem[children]
yield newItem
if (item[children] && item[children].length)
yield* treeToArr(item[children])
}
}
console.log([...treeToArr(arr,'children',true)])