const data = [
{
"sortid": 1958,
"syllabusid": 357,
"contentid": 1498,
"mlid": 1958,
"parentid": 0,
"content": "",
"mltitle": "课程简介"
},
{
"sortid": 1959,
"syllabusid": 357,
"contentid": 1499,
"mlid": 1959,
"parentid": 0,
"mltitle": "一、课程性质"
},
{
"sortid": 1960,
"syllabusid": 357,
"contentid": 1500,
"mlid": 1960,
"parentid": 0,
"mltitle": "二、课程目标"
},
{
"sortid": 1961,
"syllabusid": 357,
"contentid": 1501,
"mlid": 1961,
"parentid": 0,
"mltitle": "三、课程目标对毕业要求的支撑关系"
},
{
"sortid": 1962,
"syllabusid": 357,
"contentid": 1502,
"mlid": 1962,
"parentid": 0,
"mltitle": "四、教学内容及要求"
},
{
"sortid": 1963,
"syllabusid": 357,
"contentid": 1503,
"mlid": 1963,
"parentid": 0,
"mltitle": "五、教学内容对课程目标的支撑关系"
},
{
"sortid": 1964,
"syllabusid": 357,
"contentid": 1504,
"mlid": 1964,
"parentid": 0,
"mltitle": "六、考核方式及成绩评定标准"
},
{
"sortid": 1965,
"syllabusid": 357,
"contentid": 1505,
"mlid": 1965,
"parentid": 0,
"mltitle": "七、参考书目"
},
{
"sortid": 1966,
"syllabusid": 357,
"contentid": 1506,
"mlid": 1966,
"parentid": 0,
"mltitle": "八、教学参考资源"
},
{
"sortid": 1967,
"syllabusid": 357,
"contentid": 1507,
"mlid": 1967,
"parentid": 0,
"mltitle": "九、大纲说明"
},
{
"sortid": 1976,
"syllabusid": 357,
"contentid": 1512,
"mlid": 1976,
"parentid": 1958,
"mltitle": "课程信息"
},
{
"sortid": 1977,
"syllabusid": 357,
"contentid": 1513,
"mlid": 1977,
"parentid": 1958,
"mltitle": "课程介绍"
},
{
"sortid": 1978,
"syllabusid": 357,
"contentid": 1514,
"mlid": 1978,
"parentid": 1977,
"mltitle": "介绍1"
},
{
"sortid": 1979,
"syllabusid": 357,
"contentid": 1515,
"mlid": 1979,
"parentid": 1977,
"mltitle": "介绍2"
}
]
function toTree(data){
if(!!data&&data.length>0){
return data.filter(cur=>{
let children = data.filter(o=>cur.mlid == o.parentid)
if(!!children&&children.length>0){
cur.children = children
}
return cur.parentid == 0
});
}
}
function toTreeFor(data, id){
let tmpArr = []
for(let i=0; i<data.length; i++){
if(id == data[i].parentid){
tmpArr.push(data[i]);
const children = toTreeFor(data,data[i].mlid);
if(children.length>0){
data[i].children = children
}
}
}
return tmpArr
}
function toList(treeData, tmpArr = []){
treeData.forEach(item=>{
tmpArr.push(item)
if(!!item.children && item.children.length>0){
toList(item.children, tmpArr)
delete item.children
}
})
return tmpArr
}
// console.log(JSON.stringify(toTree(data),null,'\t'));
//console.log(JSON.stringify(toTreeFor(data,0),null,'\t'));
const treeData = toTreeFor(data,0);
console.log(JSON.stringify(toList(treeData, []),null,'\t'));其他的一些参考
示例1:
function buildTree(items) {
// 1. 创建一个映射,将ID映射到对应的条目
const map = {};
items.forEach(item => map[item.id] = {...item, children: []});
// 2. 构建树形结构
const tree = [];
items.forEach(item => {
// 如果parentID为0,表示它是根节点
if (item.parentid === '0') {
// 直接添加到树中
tree.push(map[item.id]);
} else {
// 否则,找到它的父节点,并将它添加到父节点的children数组中
map[item.parentid].children.push(map[item.id]);
}
});
return tree;
}
// 示例数据
const data = [
{id: '1958', parentid: '0', mltitle: '课程简介'},
{id: '1959', parentid: '0', mltitle: '一、课程性质'},
// ... 其他数据 ...
{id: '1976', parentid: '1958', mltitle: '课程信息'},
{id: '1977', parentid: '1958', mltitle: '课程介绍'},
// ... 其他数据 ...
];
// 调用函数并打印结果
const tree = buildTree(data);
console.log(JSON.stringify(tree, null, 2)); // 使用JSON.stringify和缩进参数来格式化输出
示例2:
function buildTreeRecursive(items, parentId = '0', tree = []) {
// 筛选当前parentId下的所有子项
const children = items.filter(item => item.parentid === parentId);
// 对每个子项进行递归处理
children.forEach(child => {
// 创建一个新的节点,并递归构建其子树
const node = {
...child,
children: buildTreeRecursive(items, child.id, [])
};
// 将新节点添加到父节点的children数组中
const parent = tree.find(item => item.id === parentId);
if (parent) {
parent.children.push(node);
} else {
// 如果没有找到父节点,说明是根节点,直接添加到树中
tree.push(node);
}
});
return tree;
}
// 示例数据
const data = [
{id: '1958', parentid: '0', mltitle: '课程简介'},
{id: '1959', parentid: '0', mltitle: '一、课程性质'},
// ... 其他数据 ...
{id: '1976', parentid: '1958', mltitle: '课程信息'},
{id: '1977', parentid: '1958', mltitle: '课程介绍'},
// ... 其他数据 ...
];
// 调用递归函数并打印结果
const tree = buildTreeRecursive(data);
console.log(JSON.stringify(tree, null, 2)); // 使用JSON.stringify和缩进参数来格式化输出