如果我创建一个像
这样的对象const name = "email";
form = {[name]: "jon@doe.com"}
我的form
对象看起来像这样
{email: "jon@doe.com"}
是否可以设置name
,我的结果将会是
{
info: {
email: "jon@doe.com"
}
}
我试过了:
const name = "info.email";
form = {[name]: "jon@doe.com"}
但生成的form
对象如下所示:
{info.email: "jon@doe.com"}
我也尝试过:
const name = "info[email]";
form = {[name]: "jon@doe.com"}
但生成的form
对象如下所示:
{info[email]: "jon@doe.com"}
答案 0 :(得分:2)
此代码将解决您的问题。
const createObject = (jsonPath, value) => {
const keys = jsonPath.split('.')
let keyValue = value;
while(keys.length) {
let obj = {};
obj[keys.pop()] = keyValue;
keyValue = Object.assign({}, obj);
}
return JSON.stringify(keyValue);
}
console.log(createObject('info.person.name', 'john doe'));

答案 1 :(得分:2)
@Dude你不能直接这样做
因为Object会将键作为字符串,无论你传递什么,都会将其指定为键
所以如果你试试
const name = "info.email";
form = {[name]: "jon@doe.com"}
它将“info.email”作为键并将值赋给该键。
如果你想在字符串有点“的情况下创建一个内部对象。”
你可以编写一个将字符串键转换为内部对象的函数。
const createObject = (jsonPath, delimiter='.') => {
const innerKeys = jsonPath.split(delimiter);
const key = innerKeys.splice(0,1);
if(innerKeys.length>0){
return {[key]:createObject(innerKeys.join(delimiter), delimiter)}
}else{
return key[0];
}
}
console.log(createObject('info.name.vishnu')); //{"info":{"name":"vishnu"}}
console.log(createObject('info,name,vishnu'), ','); //{"info":{"name":"vishnu"}}