当前位置: 首页 > 知识库问答 >
问题:

有什么方法可以将对象中键的存在依赖于外部值吗?

蒋啸
2023-03-14

我想根据标志值在对象中设置一些键

例如

const ourFlag = true //true or false depends on case

const ourObject = {
  name: 'Pablo',
  secondName: 'Picasso',
  [ourFlag && 'age']: 20,
  [ourFlag && 'moreComplexValue']: [
    {
      val: true
    },
    {
      val: false
    }
  ]
}

只要ourFlag设置为true一切都按我的预期工作,但是当我将其值更改为false时,一些奇怪的事情开始出现。

属性年龄不再存在-良好,但属性更复杂值现在为假

当标志为false时得到的代码:

js prettyprint-override">{
  name: 'Pablo',
  secondName: 'Picasso',
            // age disappear as I expected
  false: [  //why!?!
    {
      val: true
    },
    {
      val: false
    }
  ]
}

当标志为true时得到的代码:

{ .    //brilliant everything is fine
  name: 'Pablo',
  secondName: 'Picasso',
  age: 20,
  moreComplexValue: [
    {
      val: true
    },
    {
      val: false
    }
  ]
}

有没有办法用这些计算属性来处理它?

共有2个答案

柳德义
2023-03-14

问题是javascript对象键始终是字符串,否则会被类型化为字符串

因此,当值为false时,它变为字符串“false”,并且同一个键被使用两次并用第二个值重写

要动态设置关键点,可以将其设置为未定义或使用if。。其他的

const ourFlag = true //true or false depends on case

const ourObject = {
  name: 'Pablo',
  secondName: 'Picasso',
}
if(ourFlag) {
  ourObject.age = 20;
  ourObject.moreComplexValue = [
    {
      val: true
    },
    {
      val: false
    }
  ];
}
冷宏茂
2023-03-14

<代码>[标志

一个更好的选择是使用对象扩展...标志

let ourFlag = true

const a = {
    name: 'Pablo',
    secondName: 'Picasso',
    ...ourFlag && {age: 20},
    ...ourFlag && {moreComplexValue: [1, 2, 3]}
}

ourFlag = false


const b = {
    name: 'Pablo',
    secondName: 'Picasso',
    ...ourFlag && {age: 20},
    ...ourFlag && {moreComplexValue: [1, 2, 3]}
}

console.log(a)
console.log(b)

 类似资料:
  • 问题内容: 看来,当我在对象中使用数字类型作为键名时,它总是会转换为字符串。无论如何,实际上是否可以将其存储为数字?正常的类型转换似乎不起作用。 例: 目录输出: 我 想要的 是: 忠告? 问题答案: 不,这是不可能的。 密钥将始终转换为字符串。 属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。任何非字符串对象(包括数字)都可以通过toString方法转换为字符串。

  • 问题内容: 有什么方法可以将MouseListener添加到Graphic对象。 我有一个绘制椭圆的简单GUI。 我想要的是在用户单击椭圆形时处理事件 这是有效的,但当单击位于椭圆周围的虚拟框中时会触发。 当点击完全位于椭圆形上时,有人可以帮助我触发它。 提前致谢。 问题答案: 我想到的最简单的方法是避免fillOval并使用java.awt.geom包中的几何。因此,您可以声明一个椭圆,因为看起

  • 问题内容: 我有一个具有多个程序包依赖项的项目,其主要要求在中列出。当我打电话时,它将当前安装的软件包打印为普通列表。我希望也获得他们的依赖关系,如下所示: 目的是检测每个特定程序包的依赖性: 并将它们插入我的当前。例如,对于此输入: 我想得到: 有什么办法显示已安装的pip软件包的依赖性? 问题答案: 您应该看一下: 它不会像您直接指示的那样生成文件。但是,源代码(255行python代码)应该

  • 材料设计非常强调“纸张”的隐喻。要做到这一点,阴影是必不可少的。由于材料设计是一种理念,而不是API(尽管它内置在L中),因此应该在任何地方(Windows窗体、HTML/CSS等)进行设计。如何在Android API 14到20中做到这一点? 请注意,对于圆形和其他非方形形状,预制PNG实际上并不实用。

  • 本文向大家介绍MongoDB中有什么方法可以获取json数据的内部值?,包括了MongoDB中有什么方法可以获取json数据的内部值?的使用技巧和注意事项,需要的朋友参考一下 要获取JSON数据的内部值,请与dot(。)表示法一起使用。让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是获取json数据的内部值的查询- 这将产生以下输出-

  • 问题内容: 这样的事情会使小部件正常显示: 虽然这样,将使小部件完全不显示: 问题答案: 您可能对 小部件的和方法感兴趣。在以下示例中,单击后按钮消失