如何通過字符串path.to.obj
訪問myobject[path][to][obj]
?我想調用一個函數Settings.write('path.to.setting', 'settingValue')
,這個函數會寫'settingValue'
到settingObj[path][to][setting]
。我如何在沒有eval()
的情況下做到這一點?通過點語法字符串路徑訪問對象
我終於在下面的一個用戶回答它的同時大概找到了它。如果有人感興趣,我會在這裏發佈關於它如何工作的文檔。
(function(){
var o = {}, c = window.Configure = {};
c.write = function(p, d)
{
// Split the path to an array and assaign the object
// to a local variable
var ps = p.split('.'), co = o;
// Iterate over the paths, skipping the last one
for(var i = 0; i < ps.length - 1; i++)
{
// Grab the next path's value, creating an empty
// object if it does not exist
co = (co[ps[i]])? co[ps[i]] : co[ps[i]] = {};
}
// Assign the value to the object's last path
co[ps[ps.length - 1]] = d;
}
c.read = function(p)
{
var ps = p.split('.'), co = o;
for(var i = 0; i < ps.length; i++)
{
co = (co[ps[i]])? co[ps[i]] : co[ps[i]] = {};
}
return co;
}
})();
我有問題的原因是你必須跳過最後一條路。如果包含最後一個路徑,則最終只分配一個任意對象。
但你永遠不知道到底有多少部分路徑。可能是2,可能是6. – LordZardeck 2012-02-18 03:24:59
我的不好,我認爲這是某種預先存在的設置或某事。我把代碼放在一個小提琴裏:http://jsfiddle.net/HVh7X/,我在看到你的編輯之前就開始了,所以我會在一分鐘內更新我的答案。 – Rick 2012-02-18 03:45:00
哈哈,是的,只是想通了。我需要跳過最後一個路徑,因爲我只是分配一個任意值。一旦你編輯你的答案,我會接受它。 – LordZardeck 2012-02-18 03:50:05