欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

zTree的核心处理逻辑

程序员文章站 2022-05-24 19:26:18
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值根据自己的需要修改。

今天就这样