zTree的核心处理逻辑
程序员文章站
2022-12-12 23:53:47
zTree 是一个前端树形结构的插件。 使用起来很简单,我们重点关注一下插件的核心代码。 首先,zTree需要如下的数据结构: 然后zTree 会根据里面的id以及parentId 把这种扁平化的数据变成嵌套的树形结构,如下: 是不是很好看,很面向对象。这种理想的数据结构看起来很直观。 核心代码如下 ......
ztree 是一个前端树形结构的插件。
使用起来很简单,我们重点关注一下插件的核心代码。
首先,ztree需要如下的数据结构:
let areadata = [ { "id": "1", "pid": "0", "name": " 河南省", "sort": "0" }, { "id": "2", "pid": "1", "name": "鹤壁", "sort": "10" }, { "id": "3", "pid": "2", "name": "市场部", "sort": "10" }, { "id": "4", "pid": "2", "name": "网运部", "sort": "20" } ];
然后ztree 会根据里面的id以及parentid 把这种扁平化的数据变成嵌套的树形结构,如下:
var afterareadata = [{ "id": "1", "pid": "0", "name": " 河南省", "sort": "0", "children": [{ "id": "2", "pid": "1", "name": "鹤壁", "sort": "10", "children": [{ "id": "3", "pid": "2", "name": "市场部", "sort": "10" }, { "id": "4", "pid": "2", "name": "网运部", "sort": "20" }] }] }];
是不是很好看,很面向对象。这种理想的数据结构看起来很直观。
核心代码如下:
function transformtoztreeformat(snodes){ var i,l, key = 'id', parentkey = 'pid', childkey = 'children'; if (!key || key=="" || !snodes) return []; if (object.prototype.tostring.apply(snodes) === "[object array]") { var r = []; var tmpmap = []; for (i=0, l=snodes.length; i<l; i++) { tmpmap[snodes[i][key]] = snodes[i]; } for (i=0, l=snodes.length; i<l; i++) { if (tmpmap[snodes[i][parentkey]] && snodes[i][key] != snodes[i][parentkey]) { if (!tmpmap[snodes[i][parentkey]][childkey]) tmpmap[snodes[i][parentkey]][childkey] = []; tmpmap[snodes[i][parentkey]][childkey].push(snodes[i]); } else { r.push(snodes[i]); } } return r; }else { return [snodes]; } }
方法里面的key值根据自己的需要修改。
今天就这样
上一篇: js实现时间轴自动排列效果
下一篇: JavaScript(一)