如果我创建一个像这样的对象
const name = "email";
form = {[name]: "jon@doe.com"}
我的 form
对象看起来像这样
{email: "jon@doe.com"}
是否可以设置name
only我的结果看起来像
{
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"}
最佳答案
@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"}}
关于javascript - 使用计算属性名称创建内部对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48911540/