2016-02-03 39 views
1

我開始進行單元測試,我需要創建一些假數據來運行測試。 obj作爲參數,我做的事情obj.obj1.obj2.data在函數內部有沒有一種方法來設置這個假的對象因此,考慮到:?從「obj.obj1.obj2.data」字符串創建深對象

obj.obj1.obj2.data

它創建:

obj = { 
    obj1: { 
    obj2: { 
    data: 'whatever'}}} 

所以它會最後是這樣的:

var obj = creator('obj.obj1.obj2.data', 20);

回答

2

假設字符串是僅一組對象(無陣列)這應該是相當簡單的。只需在.上拆分輸入字符串,然後使用while循環進行嵌套。

function creator(str,val){ 
 
    var tree = str.split('.'); 
 
    var ret = {}; 
 
    var cur = ret; 
 
    while(tree.length){ 
 
    var name = tree.shift(); 
 
    cur[name] = tree.length ? {} : val; 
 
    cur = cur[name]; 
 
    } 
 
    return ret; 
 
} 
 

 
document.querySelector("#out").innerHTML = JSON.stringify(creator('obj.obj1.obj2.data',20));
<div id="out"></div>

+0

由於它的工作原理:) – R01010010

0

萬一任何人有興趣一樣,我創建了一個具有如下功能(https://github.com/r01010010/zappy)檢查出來一個簡單的NPM模塊:

var objFrom = function(str, last_value){ 

    var objs = str.split('.'); 
    var r = {}; 
    var last = r; 

    for(i=0; i < objs.length; i++) { 
    if(i !== objs.length - 1){ 
     last = last[objs[i]] = {}; 
    }else{ 
     last[objs[i]] = last_value; 
    } 
    } 


    return r; 


} 

var obj = objFrom('obj1.obj2.data', 20); 


console.log(obj.obj1.obj2.data);