文章表设计成这样了

后端直接给了无任何处理的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文章列表的树形结构输出的更多相关文章

  1. java不需要递归列表转树形结构

    有时候我们需要将列表结构的数据转成树形结构的数据 废话不多说直接上代码 基础类 `@Data public class TreeNode { private Long id; private Long ...

  2. 关于mysql中数据存储复合树形结构,查询时结果按树形结构输出

    1.主要思想:根据已有数据,规则性的造数据 select * FROM(select lId,strName,lId as lParentId,-1 as orderIdx from tbClassi ...

  3. java遍历给定目录,树形结构输出所有文件,包括子目录中的文件

    (转自:http://blog.csdn.net/gangwazi0525/article/details/7569701) import java.io.File; public class Rea ...

  4. 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件

    看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...

  5. c# List列表数据转换成树形结构

    把List列表结构 转换成树形结构 /// <summary> /// 构造树形Json /// </summary> public static class TreeJson ...

  6. CSS实现树形结构 + js加载数据

    看到一款树形结构,比较喜欢它的样式,就参照它的外观自己做了一个,练习一下CSS. 做出来的效果如下: li { position: relative; padding: 5px 0; margin:0 ...

  7. 递归、嵌套for循环、map集合方式实现树形结构菜单列表查询

    有时候, 我们需要用到菜单列表,但是怎么样去实现一个菜单列表的编写呢,这是一重要的问题. 比如我们需要编写一个树形结构的菜单,那么我们可以使用JQuery的zTree插件:http://www.tre ...

  8. 配合dedecms内容模型实现后台输入栏目id前端输出文章列表

    为了简化开发的工作量,也方便编辑快速操作,决定将后台进行重新设置.配合dedecms内容模型实现后台输入栏目id前端输出文章列表,这样制作科室专题页也变快了很多.比如,我们添加一个“科室专家栏目id” ...

  9. Oracle 输出树形结构

    Oracle 输出树形结构 树形结构,根 select connect_by_root(cat.parentid) root,cat.id,cat.parentid,cat.name,cat.code ...

随机推荐

  1. JavaScript进阶之路(一)初学者的开始

    一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...

  2. 【java】Naming.bind和Registry.bind区别

    Naming类和Registry类均在java.rmi包 Naming类通过解析URI绑定远程对象,将URI拆分成主机.端口和远程对象名称,使用的仍是Registry类. public static ...

  3. AJAX操作数据

    本文使用AJAX访问数据库文件,并显示在网页中.另外还有AJAX对数据库的删除操作,网页不加载,只刷新数据. 随意使用数据库中的一张表: 使用AJAX显示表中内容,首先打入body代码: <h1 ...

  4. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

  5. 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议126~128)

    建议126:适时选择不同的线程池来实现 Java的线程池实现从根本上来说只有两个:ThreadPoolExecutor类和ScheduledThreadPoolExecutor类,这两个类还是父子关系 ...

  6. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  7. margin折叠-从子元素margin-top影响父元素引出的问题

    正在做一个手机端电商项目,顶部导航栈的布局是一个div包含一个子div,如果给在正常文档流中的子div一个垂直margin-top,神奇的现象出现了,两父子元素的边距没变,但父div跟着一起往下走了! ...

  8. Dynamics CRM 之ADFS 使用 WID 的独立联合服务器

    ADFS 的使用 WID 的独立联合服务器适用于自己的测试环境,常用的就是在虚机中使用. 拓扑图如下: wID:联合身份验证服务配置为使用 Windows 内部数据库

  9. Android中开发工具Android Studio修改created用户(windows环境)

    最近经常有朋友反馈说我的安卓项目中,在一些类中会出现Created by panchengjia on 2016/12/30的字样,是如何自动实现的(默认一般为Administrator),如下图: ...

  10. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...