1

我有以下输入:

  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 呢?或者其他一些现有的功能可以让我正确地进行转换?

4

1 回答 1

0

我不认为 underscore 中有一个内置函数可以做到这一点,但是自己编写一个相当简单的事情:

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));
于 2013-06-19T03:27:11.000 回答