代码
src/utils/arr.js
/**
*
* @param {Array} flatArr 扁平数据
* @param {string} pid 上级数据的id,常用'pid'
* @returns
*/
// 扁平数组转为树形数组
export function arrToTree(flatArr, pid) {
const res = []
const map = flatArr.reduce((res, v) => (res[v.id] = v, v.children = [], res), {})
for (const item of flatArr) {
if (item[pid] === 0) {
res.push(item)
continue
}
if (item[pid] in map) {
const parent = map[item[pid]]
parent.children = parent.children || []
parent.children.push(item)
}
}
return res
}
main.js
import { arrToTree } from '@/utils/arr'
// 全局挂载
Vue.prototype.arrToTree = arrToTree
使用
this.nodeData = this.arrToTree(this.nodeArr, 'pid')