let data = {
h3: {
parent: 'h2',
name: '经理(市场)'
},
h1: {
parent: 'h0',
name: '公司机构'
},
h7: {
parent: 'h6',
name: '经理(总务)'
},
h4: {
parent: 'h3',
name: '销售'
},
h0: {
parent: '',
name: 'root'
},
h2: {
parent: 'h1',
name: '总经理'
},
h8: {
parent: 'h0',
name: '财务'
},
h6: {
parent: 'h4',
name: '仓管'
},
h5: {
parent: 'h4',
name: '代表'
}
}
let obj2Tree = function (obj) {
let result = {}
for (let key in obj) {
// 保存每个循环对象
let parent = obj[key].parent
if (parent !== '') {
// 注意这里函数的参数obj是一个局部变量
// 保存的是传参进来的那个值(指针),就是传进来的值是指针
// 给指针修改属性就等于操作引用类型一样
// obj[key].name = 'zep' 会影响传进来的那个对象
obj[parent][key] = obj[key]
// 如上操作等于操作局部变量obj
} else {
// 找到根节点, 将局部变量赋值给结果
// 很神奇, 利用了JavaScript里面的引用类型, 之后的思路, 和操作指针没什么区别
result = obj[key]
}
}
return result
}