有没有办法将 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]
的计算结果为 false
或 key
,这正是您的文字所做的,将 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 中键的存在依赖于外部值?的主要内容,如果未能解决你的问题,请参考以下文章