2016-09-27 123 views
0

我有一個需要創建樹/對象結構的URI列表。例如這裏是URI的爲URI創建路徑樹

/api/abc/xyz/abc/cde 
/api/xyz/abc/d3/d2 
/api/abc/cde/d3/d2 
/api/abc/cde/d1/d2 

結果樹應該是這樣的

{ 
    api: { 
     abc: { 
      xyz: { 
       abc: { 
        cde: {} 
       } 
      }, 
      cde: { 
       d3: { 
        d2: {} 
       }, 
       d1: { 
        d2: {} 
       } 
      } 
     }, 
     xyz: { 
      abc: { 
       d3: { 
        d2: {} 
       } 
      } 
     } 
    } 
} 

我需要用JavaScript來做到這一點。有什麼算法可以用來構建它?我從下面的代碼開始,但我有點迷路了!

paths=['/api/abc/xyz/abc/cde', 
'/api/xyz/abc/d3/d2', 
'/api/abc/cde/d3/d2', 
'/api/abc/cde/d1/d2' ]; 

var apiResources = {}; 
    for(var i in paths) { 
     var path = paths[i]; 
     //split by '/' 
     var parts = path.split("/"); 
     var node = apiResources; 
     for (var i = 0; i < parts.length; i++) { 
      if (!node[parts[i]]) { 
       node[parts[i]] = {}; 
      } 
      node = node[parts[i]]; 
     } 
    } 
+1

似乎很簡單。你有嘗試過什麼嗎? – Tempux

+0

@ sudomakeinstall2是的。我現在編輯了我的代碼。謝謝 –

+0

但是那已經做了你想要的?你可能想跳過第一個元素('[「」,「api」,「abc」,「xyz」,「abc」,「cde」]')。 – Caramiriel

回答

0
var string="a/b/c"; 
keys=string.split("/"); 
var obj={}; 
var index=obj; 
for(let i=0;i<keys.length;i++){ 
index=index[keys[i]]={}; 
} 

的OBJ現在應該包含字符串作爲對象。你可以用多個atrings重複說明