有没有办法将 Object 中键的存在依赖于外部值?

Posted

技术标签:

【中文标题】有没有办法将 Object 中键的存在依赖于外部值?【英文标题】:Is there any way to depend presence of key in Object on external value? 【发布时间】:2020-02-26 19:58:55 【问题描述】:

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

例如

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 时,一些奇怪的事情开始发生。

属性 age 不再存在 - 好 但是属性moreComplexValue 现在是false

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


  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
    
  ]

有什么方法可以用计算的属性来处理它?

【问题讨论】:

这能回答你的问题吗? Assign, and set js object property conditionally 【参考方案1】:

[flag && key] 的计算结果为 falsekey,这正是您的文字所做的,将 false 转换为字符串并在标志为 false 时覆盖它。

更好的选择是使用对象扩展...flag && object,它会在真实情况下扩展为对象,在错误情况下扩展为空Boolean,从而基本上跳过它。

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)

【讨论】:

不是骗子吗? ***.com/questions/50367085/…【参考方案2】:

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

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

要动态设置键,您可以将其设置为 undefined 或使用 if..else 设置它

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
    
  ];

【讨论】:

以上是关于有没有办法将 Object 中键的存在依赖于外部值?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组中键的值添加到字典中? [关闭]

如何加快一系列文档中键的存在总和? - 熊猫,nltk

C#2.0怎么将dictionary值集合 转换成List<object>,dictionary中键,值类型不定

更新 Firebase 中键的值

如何检索json中键的特定值?

如何维护 Java 属性文件中键的顺序?