javascript - 使用计算属性名称创建内部对象

标签 javascript ecmascript-6

如果我创建一个像这样的对象

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/

相关文章:

javascript - 如何从一个 JavaScript 文件加载另一个文件?

javascript - 不能在括号中使用变量只能直接输入将dms转换为dd

javascript - 获取在标记模板中传递的变量名称

javascript - Angular 4 - 检测到循环依赖。两个组件导入了另一个组件的 .ts 文件

Javascript 数组和对象/类

javascript - 粘性导航栏出现奇怪的 JS 错误

javascript - 数据可视化的性能和开发可能性

javascript - 正则表达式在一个替换中分别替换两个单独的东西

javascript - Jasmine:测试数组是否包含具有特定属性但没有自定义匹配器的对象元素

ios - 如何使用 ES6 语法对 React Native 中的 "Unexpected token, expected ; (44:33)"进行故障排除