簡體   English   中英

將平面對象展開為層次結構

[英]Expand flat object into hierarchical structure

我正在努力尋找擴展這種扁平結構的最佳方法

var input = [  
   {  
      "path":"/",
      "size":1111
   },
    {  
      "path":"/test1",
      "size":2222
   },
   {  
      "path":"/test1/folder2",
      "size":3333
   },
   {  
      "path":"/test1/folder2",
      "size":4444
   },
   {  
      "path":"/test7/folder1",
      "size":5555
   }
]

進入這個層次結構

var expectedoutput = [{
    "path": "/",
    "size": 1111
  },
  {
    "path": "/test1",
    "size": 2222,
    "items": [{
        "path": "/test1/folder2",
        "size": 3333,
      },
      {
        "path": "/test1/folder2",
        "size": 4444
      }
    ]
  },
  {
    "path": "/test7",
    "items": [{
      "path": "/test7/folder1",
      "size": 5555
    }]
  }
]

有任何想法嗎? 請。

不是那么糟糕的方法,它可以工作, 但是當父節點不存在(應該創建)時,有一種場景無法處理場景我已經評論了這部分。

缺少中間路徑支持的更新版本

function expand_object(list) {
    var map = {}, node, roots = [], i;
    for (i = 0; i < list.length; i += 1) {
        map[list[i].path] = i; // map  
        list[i].items = []; // place for children
    }
    for (i = 0; i < list.length; i += 1) {
        node = list[i];

        //find parent, example  "path":"test1/folder2"  parent= "test1"
        var lastSlash = node.path.lastIndexOf('/');
        if (lastSlash > 1) {
            lastSlash = lastSlash == -1 ? node.path.length : lastSlash;
            parentNode = node.path.substring(0, lastSlash);
        }
        else {
            parentNode = "/";
        }

        if (parentNode !== "/") {
            // creat missing nodes
            if (!list[map[parentNode]]) {

                list.push({ "name": parentNode ,"path": parentNode, "items": [] })
                map[list[list.length-1].path] = list.length-1;
            }

            var c = list[map[parentNode]];
            list[map[parentNode]].items.push(node);


        } else {
            roots.push(node);
        }
    }
    return roots;
}
var input = [  
   {  
      "path":"/",
      "size":1111
   },
      {  
      "path":"/",
      "size":2222
   },
    {  
      "path":"/test1",
      "size":2222
   },
   {  
      "path":"/test1/folder2",
      "size":3333
   },
   {  
      "path":"/test1/folder2",
      "size":4444
   }

 ,
    { //Missing node
       "path":"/test7/folder1",
       "size":5555
    }
]
console.log(expand_object(input));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM