在分配对象时,在对象中创建子键

时间:2017-10-27 10:31:57

标签: javascript node.js object

我希望能够在为对象分配值时根据需要创建子键。

问题是我得到了一个可以拥有这些值的JSON:

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

如果我们想将值注入Node的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;
  }
}

1 个答案:

答案 0 :(得分:-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{
	 if(!temppp[keys[0]]){
	    temppp[keys[0]]={};
	 }
     var crrentObject= temppp[keys[0]];
	 if(!crrentObject)
	    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>