我试图建立一个嵌套对象,我会尽力让自己清楚。
我有这个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"
}
}
我知道我必须使用递归来实现这一点,但我无法对其进行编码。 你能帮帮我吗?
感谢。
答案 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);