2016-09-27 103 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重复说明