js文章列表的树形结构输出
文章表设计成这样了

后端直接给了无任何处理的json数据,现在要前端实现树形结构的输出,其实后端处理更简单写,不过既然来了就码出来
var doclist = [{
"id": 1,
"level": 1,
"parent_id": 0,
"title": "A"
}, {
"id": 2,
"level": 2,
"parent_id": 1,
"title": "A1"
}, {
"id": 333,
"level": 2,
"parent_id": 1,
"title": "A2"
}, {
"id": 10,
"level": 3,
"parent_id": 5,
"title": "B2"
}, {
"id": 7,
"level": 3,
"parent_id": 2,
"title": "A3"
}, {
"id": 4,
"level": 1,
"parent_id": 0,
"title": "B"
}, {
"id": 5,
"level": 2,
"parent_id": 4,
"title": "B1"
}, {
"id": 11,
"level": 2,
"parent_id": 4,
"title": "B3"
}, {
"id": 12,
"level": 3,
"parent_id": 11,
"title": "B4"
}, {
"id": 133,
"level": 3,
"parent_id": 11,
"title": "B5"
}];
function getDocTree(doclist) {
var findDoc = function(doc_id) {
for (var i = 0; i < doclist.length; i++) {
if (doclist[i].id == doc_id) {
return doclist[i];
}
}
}
var getSeqnum = function(doc_id) {
var doc = findDoc(doc_id)
if (doc.level == 1) {
return '' + doc_id
} else {
return getSeqnum(doc.parent_id) + ',' + doc_id;
}
}
for (var i = 0; i < doclist.length; i++) {
var doc = doclist[i]
doc.seqNum = getSeqnum(doc.id)
}
return doclist.sort(function(a, b) {
var al = a.seqNum.split(','),
bl = b.seqNum.split(',');
var minLen = al.length > bl.length ? bl.length : al.length;
var result = 0
for (var i = 0; i < minLen; i++) {
if (al[i] > bl[i]) {
result = 1;
break;
}
if (al[i] < bl[i]) {
result = -1;
break;
}
}
if (result == 0 && al.length > bl.length) result = 1;
if (result == 1 && al.length > bl.length) result = 1;
if (result == 1 && al.length == 1) result = 1;
if (result == 1 && al.length > 1 && al.length < bl.length) result = -1;
return result;
})
}
function getDocTree2(doclist) {
//get max level
var maxLevel = 1;
for (var i = 0; i < doclist.length; i++) {
var doc = doclist[i]
if (parseInt(doc.level) > maxLevel) {
maxLevel = parseInt(doc.level)
}
}
//loop level
var parentDoc = []
for (var L = 1; L <= maxLevel; L++) {
var subDoc = []
for (var i = 0; i < doclist.length; i++) {
var doc = doclist[i]
if (doc.level == L) {
parentDoc.push(doc)
}
}
}
}
//测试
var doclist2 = [{
"id": 1,
"level": 1,
"parent_id": 0,
"title": "A"
}, {
"id": 5,
"level": 2,
"parent_id": 1,
"title": "A3"
}, {
"id": 4,
"level": 1,
"parent_id": 0,
"title": "B"
}, {
"id": 6,
"level": 2,
"parent_id": 4,
"title": "B2"
}, {
"id": 7,
"level": 2,
"parent_id": 4,
"title": "B3"
}, {
"id": 3,
"level": 2,
"parent_id": 1,
"title": "A2"
}, {
"id": 2,
"level": 2,
"parent_id": 1,
"title": "A1"
}];
doclist = getDocTree(doclist)
//增强显示测试结果
for (var i = 0; i < doclist.length; i++) {
var doc = doclist[i]
var ots = ''
for (var s = 1; s < doc.level; s++) {
ots += '__'
}
ots += doc.title
console.log(ots, doc.seqNum)
}
输出结果,排序后的数组直接遍历就能展示出来了
A 1
__A1 1,2
__A2 1,333
____A3 1,2,7
B 4
__B3 4,11
__B1 4,5
____B4 4,11,12
____B5 4,11,133
____B2 4,5,10
js文章列表的树形结构输出的更多相关文章
- java不需要递归列表转树形结构
有时候我们需要将列表结构的数据转成树形结构的数据 废话不多说直接上代码 基础类 `@Data public class TreeNode { private Long id; private Long ...
- 关于mysql中数据存储复合树形结构,查询时结果按树形结构输出
1.主要思想:根据已有数据,规则性的造数据 select * FROM(select lId,strName,lId as lParentId,-1 as orderIdx from tbClassi ...
- java遍历给定目录,树形结构输出所有文件,包括子目录中的文件
(转自:http://blog.csdn.net/gangwazi0525/article/details/7569701) import java.io.File; public class Rea ...
- 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件
看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...
- c# List列表数据转换成树形结构
把List列表结构 转换成树形结构 /// <summary> /// 构造树形Json /// </summary> public static class TreeJson ...
- CSS实现树形结构 + js加载数据
看到一款树形结构,比较喜欢它的样式,就参照它的外观自己做了一个,练习一下CSS. 做出来的效果如下: li { position: relative; padding: 5px 0; margin:0 ...
- 递归、嵌套for循环、map集合方式实现树形结构菜单列表查询
有时候, 我们需要用到菜单列表,但是怎么样去实现一个菜单列表的编写呢,这是一重要的问题. 比如我们需要编写一个树形结构的菜单,那么我们可以使用JQuery的zTree插件:http://www.tre ...
- 配合dedecms内容模型实现后台输入栏目id前端输出文章列表
为了简化开发的工作量,也方便编辑快速操作,决定将后台进行重新设置.配合dedecms内容模型实现后台输入栏目id前端输出文章列表,这样制作科室专题页也变快了很多.比如,我们添加一个“科室专家栏目id” ...
- Oracle 输出树形结构
Oracle 输出树形结构 树形结构,根 select connect_by_root(cat.parentid) root,cat.id,cat.parentid,cat.name,cat.code ...
随机推荐
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- 玩转spring boot——结合redis
一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...
- 最长回文子串-LeetCode 5 Longest Palindromic Substring
题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
- 浏览器的兼容模式下的button中文字垂直方向不居中显示
<button style="cursor:pointer;vertical-align: middle;" >删除</button> 这时候垂直不居中. ...
- Android—Volley:接收服务端发送的json数据乱码问题解决
new JsonObjectRequest中重写方法parseNetworkResponse,内容如下: /** * 重写此方法不会导致乱码 */ @Override protected Respon ...
- Android之使用Bundle进行IPC
一.Bundle进行IPC介绍 四大组件中的三大组件(Activity.Service.Receiver)都是支持在Intent中传递Bundle数据的,由于Bundle实现了Parcelable接口 ...
- MMORPG大型游戏设计与开发(攻击区域 扇形)
距离上次发布已经有了很长一段时间,期间由于各种原因没有更新这方面的技术分享,在这里深表遗憾.在MMO或其他的游戏中,会有针对各种形状的计算,通常在攻击区域里不会很复杂,常见的为矩形.圆形.扇形.今天分 ...
- 《Note --- Unreal 4 --- Sample analyze --- StrategyGame(continue...)》
---------------------------------------------------------------------------------------------------- ...
- 第14章 Linux启动管理(3)_系统修复模式
3. 系统修复模式 3.1 单用户模式 (1)在grub界面中选择第2项,并按"e键"进入编辑.并在"-quiet"后面加入" 1",即&q ...
- SpringMvc中初始化参数绑定
初始化参数绑定与类型转换很类似,初始化绑定时,主要是参数类型 ---单日期 在处理器类中配置绑定方法 使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型 proper ...