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 ...
随机推荐
- CENTOS 6.5 平台离线编译安装 Mysql5.6.22
一.下载源码包 http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.22.tar.gz 二.准备工作 卸载之前本机自带的MYSQL 安装 cmake,编 ...
- Could not create SSL connection through proxy serve-svn
RA layer request failedsvn: Unable to connect to a repository at URL xxxxxx 最后:Could not create SSL ...
- ASP.NET Core应用针对静态文件请求的处理[5]: DefaultFilesMiddleware中间件如何显示默认页面
DefaultFilesMiddleware中间件的目的在于将目标目录下的默认文件作为响应内容.我们知道,如果直接请求的就是这个默认文件,那么前面介绍的StaticFileMiddleware中间件会 ...
- ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法
在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面.在ASP.NET ...
- Hawk 5. 数据库系统
Hawk在设计之初,就是以弱schema风格定义的.没有严格的列名和列属性.用C#这样的静态强类型语言编写Hawk,其实并不方便.但弱schema让Hawk变得更灵活更强大. 因此,Hawk虽然之前支 ...
- AFNetworking 3.0 源码解读(八)之 AFImageDownloader
AFImageDownloader 这个类对写DownloadManager有很大的借鉴意义.在平时的开发中,当我们使用UIImageView加载一个网络上的图片时,其原理就是把图片下载下来,然后再赋 ...
- EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因(系列4)
前言 Entity Framework 延伸系列目录 今天我们来聊聊EF的日志记录. 一个好的数据库操作记录不仅仅可以帮你记录用户的操作, 更应该可以帮助你获得效率低下的语句来帮你提高运行效率 废话不 ...
- LoadRunner函数百科叒叒叒更新了!
首先要沉痛通知每周四固定栏目[学霸君]由于小编外派公干,本周暂停. 那么这周就由云层君来顶替了,当然要要说下自己做的内容啦,DuangDuang! <LoadRunner函数百科>更新通知 ...
- psoc学习
第一是:项目的路径需要放在Documents and Settings\,也就是默认的文件夹的地方,不然会报错错误范例为:Question:CY8CKIT-023 kit example projec ...
- CSS中强悍的相对单位之em(em-and-elastic-layouts)学习小记
使用相对单位em注意点 1.浏览器默认字体是16px,即1em = 16px,根元素设置如下 html{ font-size: 100%; /* WinIE text resize correctio ...