const arr =[
{
id:1,
name:'部门A',
parentId:0,
},
// {
// id:9,
// name:'部门9',
// parentId:0,
// },
{
id:2,
name:'部门B',
parentId:1,
},
{
id:3,
name:'部门C',
parentId:1,
},
{
id:4,
name:'部门D',
parentId:2,
},
{
id:5,
name:'部门E',
parentId:2,
},
{
id:6,
name:'部门F',
parentId:3,
},
{
id:7,
name:'部门G',
parentId:6,
},
]
function tree(arr) {
let treeNode =[ {
id:1,
name:'部门A',
parentId:0,
}]
console.log(arr[0])
arr.forEach((element,index) => {
console.log(index,'|||||||||')
let parent = arr.filter(item=>item.parentId=== element.id)
console.log(parent)
console.log('[]',element)
if(parent.length){
element['children']=parent
}
// console.log(JSON.stringify(treeNode) )
});
// let treeNode =[arr[0]]
console.log(arr[0],'======')
console.log(JSON.stringify(treeNode) )
}
function tree1(){
const idToTreeNode = new Map()
let root = null
arr.forEach(item=>{
const {id ,name, parentId}=item
const treeNode = {id,name}
// console.log(treeNode,idToTreeNode)
idToTreeNode.set(id,treeNode)
const parentNode = idToTreeNode.get(parentId)
console.log(parentNode)
if(parentNode){
if(parentNode.children==null)parentNode.children =[]
parentNode.children.push(treeNode)
}
if(parentId===0) root = treeNode
})
return root
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app"></div>
<script type="text/javascript">
var list=[
{
"roleId": "11111",
"roleName": "一级角色",
"updTime": "2018-05-02T04:06:40.000+0000",
"attr1": null
},
{
"roleId": "22222",
"roleName": "二级角色",
"updTime": "2018-05-02T06:27:27.000+0000",
"attr1": "11111"
},
{
"roleId": "33333",
"roleName": "三级角色",
"updTime": "2018-05-02T06:28:00.000+0000",
"attr1": "22222"
},
{
"roleId": "44444",
"roleName": "一级角色1",
"updTime": "2018-05-02T07:48:30.000+0000",
"attr1": null
},
{
"roleId": "55555",
"roleName": "二级角色1",
"updTime": "2018-05-02T07:48:56.000+0000",
"attr1": "44444",
"attr2": null,
"attr3": null
},
{
"roleId": "66666",
"roleName": "三级角色1",
"updTime": "2018-05-02T07:49:24.000+0000",
"attr1": "55555",
}
]
function transform (sNodes, id, pid, children) {
let i
let l
let key = id//自身id
let parentKey = pid//父id
let childKey = children//子
if (!key || key == '' || !sNodes) return []
if (Object.prototype.toString.call(sNodes) == '[object Array]') {
let r = []
let tmpMap = []
for (i = 0, l = sNodes.length; i < l; i++) {
tmpMap[sNodes[i][key]] = sNodes[i]
}
for (i = 0, l = sNodes.length; i < l; i++) {
if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {
if (!tmpMap[sNodes[i][parentKey]][childKey]) { tmpMap[sNodes[i][parentKey]][childKey] = [] }
tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i])
} else {
r.push(sNodes[i])
}
}
return r
} else {
return [sNodes]
}
}
var a=transform(list,"roleId","attr1","children")
console.log(a);
</script>
</body>
</html>