2017-10-27 7 views
0

オブジェクトに値を割り当てる際に、必要に応じてサブキーを作成できます。割り当て時に必要に応じてオブジェクト内にサブキーを作成

事は、私はこれらの値を持つことができますJSONを取得することです:

{ 
    "myKey": "Foobar", 
    "myOtherKey.mySubkey.myOtherSubkey": "Bazboo" 
} 

我々はノードのglobalオブジェクトに値を注入したい、私たちは次のことを持っていると言っ:

global: { 
    myKey: "Foobar", 
    myOtherKey: { 
    mySubkey: { 
     myOtherSubkey: "Bazboo" 
    } 
    } 
} 

私は現時点でこれを持っています:

function addGlobal (key, val) { 
    if(~key.indexOf('.')) { 
    let keys = key.split('.'); 
    let context = global; 

    while(keys.length) { 
     key = keys.shift(); 
     if(! (key in context)) { 
      context[key] = {}; 
     } 
     context = context[key] 
    } 
    context = val; 
    } 
    else { 
    global[key] = val; 
    } 
} 
+0

チェックアウトlodashのセットの機能に直面した場合、私に知らせてください。それはすでにあなたが望むことをします。 https://lodash.com/docs/4.17.4#set – earthling

+0

*「私は現時点でこれを持っています」*そして?それは動作しませんか?そうでない場合は、*どのように動作しないのですか?それはなぜ問題なのですか? –

+0

@earthling私はロダシを使用しないで、私はしたくない。 – Tripesdeporc

答えて

-1

私はあなたのロジックを変更しました再帰を使用して、それを確認し、すべての問題

var temp = { 
 
    "myKey": "Foobar", 
 
    "myOtherKey.mySubkey.myOtherSubkey": "Bazboo" 
 
}; 
 
function test(){ 
 
    addGlobal('myKey','Foobar',global); 
 
    addGlobal('myOtherKey.mySubkey.myOtherSubkey','Bazboo',global); 
 
    document.getElementById("json").innerHTML = JSON.stringify(global, undefined, 2); 
 
} 
 
var global= {} 
 
function addGlobal (key, val,temppp) { 
 
    var keys = key.split('.'); 
 
    if(keys.length==1){ 
 
     temppp[key]=val; 
 
    }else{ 
 
\t if(!temppp[keys[0]]){ 
 
\t  temppp[keys[0]]={}; 
 
\t } 
 
    var crrentObject= temppp[keys[0]]; 
 
\t if(!crrentObject) 
 
\t  crrentObject={}; 
 
     keys.splice(0, 1); 
 
     addGlobal(keys.join('.'),val,crrentObject) 
 
    } 
 
}
<input type="button" value="click" onclick="test()"> 
 
Click test and check global object below 
 
<pre id="json"></pre>

関連する問題