//原始数据
var v = [
{ id: 9, name: "第九个", prant_id: 5 },
{ id: 1, name: "第一个" },
{ id: 2, name: "第二个" },
{ id: 3, name: "第三个" },
{ id: 4, name: "第四个" },
{ id: 5, name: "第五个", prant_id: 1 },
{ id: 6, name: "第六个", prant_id: 5 },
{ id: 7, name: "第七个", prant_id: 5 },
{ id: 8, name: "第八个", prant_id: 1 },
{ id: 10, name: "第十个", prant_id: 5 },
{ id: 11, name: "第十一个", prant_id: 6 },
]
function filterToTree(array) {
let _map = new Map()
let del_arr = []
let returnArr = []
for (let index = 0; index < array.length; index++) {
_map.set(array[index].id, array[index])
}
array.forEach(element => {
if ('prant_id' in element) {
del_arr.push(element.id) //添加要删掉的ID
recursion(element.prant_id, element) // 递归处理
}
});
function recursion(key, val) {
let _get = JSON.parse(JSON.stringify(_map.get(key)))
if (Array.isArray(_get.childen)) {
_get.childen = _get.childen.filter(function (item) { return item.id != val.id })
_get.childen.push(val)
} else {
_get.childen = [val]
}
_map.set(key, _get)
if ("prant_id" in _get) {
recursion(_get.prant_id, _get)
}
}
// 处理结果
_map.forEach((k, v) => {
if (!del_arr.includes(k.id)) {
returnArr.push(k)
}
})
return returnArr
}
console.log(filterToTree(v))
如有问题或者好的意见欢迎指出