我希望能够在为对象分配值时根据需要创建子键。
问题是我得到了一个可以拥有这些值的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;
}
}
答案 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>