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和缩进参数来格式化输出