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']”这样的东西能起作用,因为我真的不想检查是否有任何关卡以及有多少关卡(