我有以下输入:
var input = {
"usa.ca.los": 12345,
"usa.ca.sfo": 12346,
"usa.ws.sea": 22333,
"others.a.b.c.d.e": 33333
}
我想把它变成:
var output = {
"usa": {
"ca": {
"los": 12345,
"sfo": 12346,
},
"ws": {
"sea": 22333
}
}
"others":{"a":{"b":{"c":{"d":{"e":33333}}}}}
}
我知道我可以使用递归函数并构造输出但似乎工作太多了。
由于我在Node.js中的程序,是否有更简单的方法使用underscore.js?或者其他一些现有功能可以让我正确地进行转换?
答案 0 :(得分:0)
我不认为这是下划线中的内置函数,但是自己编写一个相当简单的事情:
var input = {
"usa.ca.los": 12345,
"usa.ca.sfo": 12346,
"usa.ws.sea": 22333,
"others.a.b.c.d.e": 33333
}
function parse(input){
var output = {};
for(var key in input){
setByString(output, input[key], key);
}
return output;
}
function setByString(obj, value, key){
var split = key.split('.');
while(split.length){
key = split.shift();
if(split.length){
if(!obj.hasOwnProperty(key)){
obj[key] = {};
}
obj = obj[key];
} else {
obj[key] = value;
}
}
}
console.log(parse(input));