/**
* 数组转树形结构数据
* @param list 传入源数据列表
* @param id 定义源数据中确定数据唯一性的属性
* @param parentId 定义源数据中确定上下层级关系的属性
*/
function arrToTree(list,id = 'id',parentId = 'pId') {
// 定义一个最终返回的数据包
let result = []
// 如果传进来的数据不是数组则返回空数组
if (!Array.isArray(list)) {
return result
}
// 为了方法能够通用首先将数据做一次净化处理
list.forEach(function(item){
item.children && delete item.children
})
// 将数据处理成以唯一值ID为key的map结构数据
var map = {}
list.forEach(function(item){
map[item[id]] = item
})
// 根据子级数据是否有归属来确定应该挂载的节点数据
list.forEach(function(item){
var parent = map[item[parentId]]
if (parent) {
// 利用或运算符来简化判断条件
(parent.children || (parent.children = [])).push(item)
} else {
result.push(item)
}
})
console.log('result',result)
// 返回处理后的数据
return result
}
javascript 将数据列表处理成树形有层级关系的列表方法
最新推荐文章于 2024-11-16 14:11:26 发布