Javascript 如何不使用JStree重复文件夹?

Javascript 如何不使用JStree重复文件夹?,javascript,json,jstree,Javascript,Json,Jstree,我有一个JSON文件,其中包含如下数据: dataTree.json = [ { "datap": "816816816816816818", "name": "image1.jpg", "url": "/files/folder1/test/d2e9c54ceedc9/image1.jpg", "path": "/files/folder1/test/image1.jpg", "size": 35969

我有一个JSON文件,其中包含如下数据:

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
    }
]
在这一部分中,我对jstree进行了操作和格式设置

$.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

});
结果以以下格式输出:

[
    {
    "id": null,
    "text": "Root",
    "icon": "tree.png",
    "state": null,
    "children": [
        {
        "id": null,
        "text": "folder1",
        "children": [
        {
        "id": null,
        "text": "test",
            "children": [
             {
                "id": null,
                "text": "image1.jpg",
                "icon": "glyphicon glyphicon-picture",
                "children": []
             }
            ]
         }
      ]
  },
 {
    "id": null,
    "text": "folder1",
    "children": [
      {
        "id": null,
        "text": "pruebas",
        "children": [
          {
            "id": null,
            "text": "image2.jpg",
            "icon": "glyphicon glyphicon-picture",
            "children": []
          }
        ]
      }
    ]
  },
  {
    "id": null,
    "text": "folder1",
    "children": [
      {
        "id": null,
        "text": "test",
        "children": [
          {
            "id": null,
            "text": "image3.jpg",
            "icon": "glyphicon glyphicon-picture",
            "children": []
          }
        ]
      }
    ]
  }
]
}
]
此树由jstree生成,三个文件夹具有相同的名称。我不想创建三个同名文件夹,我希望在找到一个存在的文件夹时,将数据输入到该现有文件夹中

相反,我想要这个:


以下是如何解析此结构的演示:

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

var tmp={},i,j,k,l,p1,p2,fin=[];
对于(i=0,j=a.length;i
您所传递的正是您所看到的渲染内容-jsTree没有问题。如果您查看一下您正在馈送到jsTree的JSON,它有重复的文件夹。今天晚些时候我将向您展示如何正确解析它。我表达错误,问题是如何将正确的格式传递给jsTree,很抱歉。。。非常感谢瓦卡塔和jsTree的感谢,太棒了,太棒了!它工作得很好。。。你的回答就是我需要的,你帮了我很多,谢谢瓦卡塔。
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