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 ...
随机推荐
- 关于几个主流语音SDK的接入问题
这两周都在忙着游戏上线还有接入游戏语音,两周分别接了腾讯语音和百度语音!!! 关于腾讯语音的一些问题 由于发现腾讯语音的在录完音频后的数据是编过码的所以出现了一些问题: *不能解码(腾讯方不提供解码算 ...
- 客户端的验证插件validator
简单,智能,令人愉悦的表单验证~~~ 官方文档:http://www.niceue.com/validator/ <!DOCTYPE html> <html> <head ...
- canvas与html5实现视频截图功能
这段时间一直在研究canvas,突发奇想想做一个可以截屏视频的功能,然后把图片拉去做表情包,哈哈哈哈哈哈~~ 制作方法: 1.在页面中加载视频 在使用canvas制作这个截图功能时,首先必须保证页面上 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...
- JAVA程序员常用软件整理下载
********为了大家学习方便,特意整理软件下载如下:*************Java类软件:-------------------------------JDK7.0:http://pan.ba ...
- 14门Linux课程,打通你Linux的任督二脉!
Linux有很多优点:安全.自主.开源--,也正是这些优点使得很多人都在学Linux. 虽说网上有大把的Linux课程资源,但是对很多小白来说网上的课程资源比较零散并不适合新手学习. 正因为此,总结了 ...
- Maven仓库搭建和配置
maven在本地搭建仓库的实际需求maven在项目构建过程需要下载一些必要的软件包,这些默认的下载链接都是访问maven的远程中央仓库Central Repo.如果项目中的成员,每次第一次构建的时候都 ...
- Linux虚拟化学习笔记<一>
关于虚拟化,原理的东西是非常复杂的,要想完全理解,没有足够的耐心是不不能完全学透这部分内容的.那下面我主要以资源汇总的形式把一些资料罗列出来,帮助大家快速理解虚拟化,快速使用和配置. 为什么要虚拟化: ...
- 让 Ubuntu 桌面自动更换壁纸
引言 让我们的桌面系统自动更换壁纸是一个很常见的美化需求,而且确实也存在着不少这方面的小软件可以实现这个功能.事实上,在基于 Gnome 的桌面系统中,我们可以不需要借助任何第三方软件的帮助来让我们的 ...
- 【初探Spring】------Spring IOC(三):初始化过程---Resource定位
我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean.同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然 ...