在Javascript中构建嵌套对象

时间:2017-11-17 14:36:57

标签: javascript json object

我试图建立一个嵌套对象,我会尽力让自己清楚。

我有这个json结构:

 {
      "origin.geo.country": "USA",
      "origin.geo.state": "NY",
      "origin.geo.zip": 4444,
      "user.name": "Michael",
      "user.surname": "Jordan"  
}

我需要一个输出这样的函数:

{
     origin: {
         geo: {
             country: "USA",
             state: "NY",
             zip: 4444
         }
     },
     user: {
         name: "Michael",
         surname: "Jordan"
     }
 }

我知道我必须使用递归来实现这一点,但我无法对其进行编码。 你能帮帮我吗?

感谢。

2 个答案:

答案 0 :(得分:2)

所以伙计们,

@Ben Beck回答帮助了我。

我只需对该功能进行一些小改动:

function (path,value,obj) {

    var parts = path.split("."), part;

    //reference the parent object
    var parent = obj;

    while(part = parts.shift()) {

        // here I check if the property already exists
        if( !obj.hasOwnProperty(part) ) obj[part] = {};

        // if is the last index i set the prop value
        if(parts.length === 0) obj[part] = value;

        obj = obj[part]; // update "pointer"
    }

    //finally return the populated object
    return parent;

}

答案 1 :(得分:0)

您可以使用例如Array#reduce



const o = {
  "origin.geo.country": "USA",
  "origin.geo.state": "NY",
  "origin.geo.zip": 4444,
  "user.name": "Michael",
  "user.surname": "Jordan",
};

const r = Object.keys(o).reduce((s, a) => {
  const t = a.split('.');
  const k = t[0];
  const v = t[t.length - 1];
  k in s ? s[k][v] = o[a] : s[k] = Object.assign({}, { [v]: o[a] });
  return s;
}, {});

console.log(r);