2011-08-15 10 views
5

是有辦法在施工後的任務自動創建子對象,即JS打造財產分配對象路徑

var obj = {}; 
obj.a.b.c=13; 

上面給了我一個「obj.a是未定義」錯誤

我寫了一個功能來做到這一點,但想知道是否有更簡單的方法

_setObjectProperty(obj,13,['a','b','c']); 
function _setObjectProperty(obj,value,loc) 
{ 
    if(loc.length>1) { 
     obj[loc[0]] = obj[loc[0]] || {}; 
     _setObjectProperty(obj[loc[0]],value,loc.splice(1)); 
    } 
    else if(loc.length===1) { 
     obj[loc[0]]=value; 
    } 
} 

回答

8

不,沒有內置的方式來在JavaScript中做到這一點。唯一的辦法就是像你一樣創建自己的功能。如果你想要點操作符/符號的方便,你可以使用下面的函數:

var set = function(path, value, root) { 
    var segments = path.split('.'), 
     cursor = root || window, 
     segment, 
     i; 

    for (i = 0; i < segments.length - 1; ++i) { 
    segment = segments[i]; 
    cursor = cursor[segment] = cursor[segment] || {}; 
    } 

    return cursor[segments[i]] = value; 
}; 

set("a.b.c", 2); 

console.log(a.b.c) // => 2 
+0

這是輝煌的,但它是如何工作的?我沒有看到根更新的位置。 – Tristan

+0

看來,根目錄是您可能想要附加到該路徑的對象。 – diosney