方法1 : 递归方法
let list = [ { 'id': '29', 'pid': '', 'name': '总裁办' }, { 'id': '2c', 'pid': '', 'name': '财务部' }, { 'id': '2d', 'pid': '2c', 'name': '财务核算部' }, { 'id': '2f', 'pid': '2c', 'name': '薪资管理部' }, { 'id': 'd2', 'pid': '', 'name': '技术部' }, { 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部' }, { 'id': '3e', 'pid': 'd3', 'name': 'python研发部' } ]
// 封装函数
function transArray(arr, pid = '') {
// 循环遍历
let newArr = [] // 专门收集转化后的数组
arr.forEach((item) => {
// 1-先要找第一层
if (item.pid === pid) {
// 3-收集非一级
let child = transArray(arr, item.id) // 递归:函数内部调用函数
if (child.length) {
// 有长度表示可以收集到二级
item.children = child
}
// console.log(child);
//2-收集筛选出来的一级
newArr.push(item)
}
})
return newArr
}
// 调用函数
console.log(transArray(list));
方法二 : 导包方法转换
- 下包
npm install array-to-tree -S - 在
utils工具函数中定义函数import arrayToTree from 'array-to-tree' export function transArray(arr) { return arrayToTree(arr, { parentProperty: 'pid', customID: 'id' }) } - 组件中使用
transArray()
import { transArray } from '@/utils'
data() {
return {
data: [],
}
},
methods: {
// 发送请求获取组织架构数据列表
async loadDep() {
const res = await getDepartments()
if (res.code === 10000) {
// 成功后获取数据后转换树形
this.data = transArray(res.data.depts)
}
}
}