如何不用JStree重复文件夹?

时间:2015-05-13 22:52:00

标签: javascript json jstree

我有一个包含以下数据的JSON文件:

extensions[ControlFlowExtension-master]

在这部分中,我为jstree

制作了操作和格式
dataTree.json =  
[
    {
        "datap": "816816816816816818",
        "name": "image1.jpg",
        "url": "/files/folder1/test/d2e9c54ceedc9/image1.jpg",
        "path": "/files/folder1/test/image1.jpg",
        "size": 35969
    },

    {
        "datap": "857022de4fccdcb54623ff6185daae706a47140c",
        "name": "image2.jpg",
        "url": "/files/folder1/pruebas/85623ff6185d7140c/image2.jpg",
        "path": "/files/folder1/pruebas/image2.jpg",
        "size": 17689282
    },
    {
        "datap": "b260ec3250420c953a9db41897c34e3551620ec325035516256b2/image3.jpg",
        "path": "/files/folder1/test/image3.jpg",
        "size": 710632
    }
]

结果以这种格式输出:

$.getJSON('/dataTree.json', function (response) {
            var fullTree = [];
            if (response == []){
                var refullTree = []
            } 
            else { 
                var refullTree = [{"id":null,"text":"Root","icon":"tree.png","state":null,"children":[]}]
            }

            function treeElements(element, tree){
                var parts = element.path.split("/");
                parts.splice(0,2);
                for (var k in parts) {
                    var count = 0
                    var part = parts[k];
                    if (part == "") part = "#";
                    var item = {"id":null, "text": part, "icon": icon(part), "children": []};
                    tree.push(item);
                    tree = item.children;

                }


                function icon(search){
                    if (search.indexOf(".png",".jpg") > -1){ 
                        return "glyphicon glyphicon-picture" }
                    else if(search.indexOf("jpg",".jpg") > -1){ 
                        return "glyphicon glyphicon-picture" }
                }

            }

            for (var i in response) {
                treeElements(response[i], fullTree);

            }
            refullTree[0]["children"] = fullTree

});

此树由jstree生成,三个文件夹具有相同的名称。我不想创建三个具有相同名称的文件夹,我希望当我找到一个存在的文件夹时,将数据输入到该现有文件夹中。

current tree diagram

相反,我想要这个:

desired tree diagram

1 个答案:

答案 0 :(得分:1)

以下是如何解析此结构的演示:http://jsfiddle.net/DGAF4/506/

这是实际的解析代码(在小提琴中也可见);

var tmp = {}, i, j, k, l, p1, p2, fin = [];
for(i = 0, j = a.length; i < j; i++) {
    p1 = a[i].path.replace(/^\//,'').split('/');
    p2 = '';
    for(k = 0, l = p1.length; k < l; k++) {
        tmp[p2 + '/' + p1[k]] = {
            id : p2 + '/' + p1[k], 
            parent : p2 ? p2 : '#', 
            text : p1[k]
        };
        p2 += '/' + p1[k];
    }
    for(k in a[i]) {
        if(a[i].hasOwnProperty(k)) {
            tmp[a[i].path][k] = a[i][k];
        }
    }
    if(a[i].path.match(/(jpg|png|jpeg)$/)) {
        tmp[a[i].path].icon = "glyphicon glyphicon-picture";
    }
}
for(i in tmp) {
    if(tmp.hasOwnProperty(i)) {
        fin.push(tmp[i]);
    }
}
// fin contains the structure in a jstree compatible format
相关问题