Javascript 使用计算特性名称创建内部对象

Javascript 使用计算特性名称创建内部对象,javascript,ecmascript-6,Javascript,Ecmascript 6,如果我创建一个像 const name = "email"; form = {[name]: "jon@doe.com"} 我的表单对象如下所示 {email: "jon@doe.com"} 是否可以设置名称仅我的结果看起来像 { info: { email: "jon@doe.com" } } 我试过: const name = "info.email"; form = {[name]: "jon@doe.com"} 但是生成的表单对象如下所示: {info.ema

如果我创建一个像

const name = "email";

form = {[name]: "jon@doe.com"}
我的
表单
对象如下所示

{email: "jon@doe.com"}
是否可以设置
名称
我的结果看起来像

{
  info: {
    email: "jon@doe.com"
  }
}
我试过:

const name = "info.email";

form = {[name]: "jon@doe.com"}
但是生成的
表单
对象如下所示:

{info.email: "jon@doe.com"}
{info[email]: "jon@doe.com"}
我还尝试:

const name = "info[email]";

form = {[name]: "jon@doe.com"}
但是生成的
表单
对象如下所示:

{info.email: "jon@doe.com"}
{info[email]: "jon@doe.com"}

此代码将解决您的问题

constcreateobject=(jsonPath,value)=>{
const keys=jsonPath.split('.'))
让keyValue=value;
while(键长){
设obj={};
obj[keys.pop()]=keyValue;
keyValue=Object.assign({},obj);
}
返回JSON.stringify(keyValue);
}

log(createObject('info.person.name','johndoe')此代码将解决您的问题

constcreateobject=(jsonPath,value)=>{
const keys=jsonPath.split('.'))
让keyValue=value;
while(键长){
设obj={};
obj[keys.pop()]=keyValue;
keyValue=Object.assign({},obj);
}
返回JSON.stringify(keyValue);
}

log(createObject('info.person.name','johndoe')@伙计你不能直接这么做

因为对象将把key作为字符串,而您传递给它的任何内容都将指定为key

所以如果你尝试

const name=“info.email”;
表单={[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"}}

@老兄,你不能直接这么做

因为对象将把key作为字符串,而您传递给它的任何内容都将指定为key

所以如果你尝试

const name=“info.email”;
表单={[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"}}


你得到的错误是什么?没有错误,对象名称是错误的,我添加了上面的示例。请共享一个我删除的react上下文,因为这更像是一个与js相关的问题。你是否更改了整个帖子?:|你想让我根据当前帖子修改答案吗@Dude你得到了什么错误?没有错误,对象名称是错误的,我添加了上面的示例。请共享一个我删除的react上下文,因为这更像是一个与js相关的问题。你是否更改了整个帖子?:|你想让我根据当前帖子修改答案吗@杜迪,我更新了这个问题,让它简单多了。我的问题是,我不喜欢有两个参数(名称,id),我只想通过一个设置对象string@Dude现在看一看:)
'info.name.test'
@dfsq我提到它只适用于一个级别,没有拆分字符串的本地js解决方案吗?我希望像“info['name']”这样的东西能起作用,因为我真的不想检查是否有任何关卡以及有多少关卡(我更新了这个问题,使之更简单。我的问题是我不喜欢有两个参数(名称、id),我只想通过一个参数设置对象string@Dude现在看一看:)
'info.name.test'
@dfsq我提到它只适用于一个级别,没有拆分字符串的本地js解决方案吗?我希望像“info['name']”这样的东西能起作用,因为我真的不想检查是否有任何关卡以及有多少关卡(