2013-01-10 35 views
1

我想一个REST风格的URL转换成文字一个JavaScript,像这样:转换REST URL文本

来自:

var url = "https://stackoverflow.com/a/b/c/d"; 

到:

var obj = { 
    a:{ 
    b:{ 
     c:{ 
     d:{} 
     } 
    } 
    } 
}; 

你将如何做这个?

+0

重复的[使用Javascript:如何给它的字符串名称设置对象的属性(http://stackoverflow.com/questions/13719593/javascript-how-to-set-object -property-given-its-string-name)...它基本上是一样的,只是分隔符是不同的。 –

回答

1

我尝试:

var url = '/a/b/c/d'; 
var fun = function(a) { 
    var res = {}; 
    res[a[0]] = a.length == 1 ? {} : fun(a.slice(1)); 
    return res; 
}; 

// obj has what you need 
var obj = fun(url.split('/').slice(1));  


// OTHER EXAMPLE 
var t = ['that', 'is', 'so', 'fun']; 
console.log(fun(t)); 
// above returns object: {that: { is: { so: { fun: {} }}}} 
3

你可能会凝结,但这里有一个解决方案:

var u = '/a/b/c/d'; 
var t = u.split('/'); 
var o = {}; 
for (var i=t.length; i-->1;) { 
    var temp = o; 
    o = {}; 
    o[t[i]] = temp; 
} 

结果是o

+0

我没有看到干净而快速地清除使用临时变量:\ –

+0

曾在编辑代码去加快步伐,但你会发现你的版本更加整洁。 – guypursey

+0

删除'temp'的一种方法是这样的,虽然可能不会更快:'o =(function(){return JSON.parse('{“'+ t [i] +'”:'+ JSON.stringify o)+'}')})();' – guypursey