2013-01-10 36 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