<template>
ceshi
</template>
<script setup lang='ts'>
import { ref, reactive, defineComponent } from 'vue'
interface Data{
listArr:any[]
}
let listArr=reactive([
{id:1,title:'num1',parentId:0},
{id:2,title:'num2',parentId:1},
{id:3,title:'num3',parentId:2},
{id:4,title:'num4',parentId:2},
{id:5,title:'num5',parentId:3},
])
function listToTree(list:any[]) {
var arr = []
let items = []
var idsStr = ''
// 获取每个节点的直属子节点(是直属,不是所有子节点)
for (let i = 0; i < list.length; i++) {
let key = list[i].parentId
if (items[key]) {
items[key].push(list[i])
} else {
items[key] = []
items[key].push(list[i])
}
idsStr += idsStr === '' ? list[i].id : ',' + list[i].id
}
for (var key in items) {
if (idsStr.indexOf(key) === -1) {//找到最大的父节点key
arr = formatTree(items, key)
}
}
console.log(arr)
return arr
}
function formatTree(items:any, parentId:any) {
let result:any = []
if (!items[parentId]) {
return result
}
for (let t of items[parentId]) {
t.children = formatTree(items, t.id)//递归获取children
result.push(t)
}
return result
}
let arrb= listToTree(listArr)
console.log(arrb);
</script>
<style>
</style>