基本上,我想知道如果变量为 false 但来自对象内部,是否可以避免将属性添加到对象中。假设我有这个对象:
var obj = { foo: 'bar', bar: 'foo' };
现在我想重写同一个对象,但我只想在新变量( bool 值)为 true 时添加第二个属性。 问题是我怎样才能做到这一点,例如使用这样的三元运算符:
var add = false;
var obj = {
foo: 'bar',
(add ? bar: 'foo': null)
};
我想避免的是这样的:
...
bar: ( add ? 'foo' : undefined )
因为我不想在 add == false 的情况下有条形索引。另外,赋值必须位于对象内部(这就是问题,如果可能的话),因为这样的东西不是我正在寻找的:
...
if (!add) delete obj.bar; // This would be after the creation of the whole object
解决方法
显然,这可以通过多种方式实现,但我还没有发现任何在对象本身内部完成的操作。我可以使用三元运算符并拥有两个像这样的对象:
var obj = add ? {
foo: 'bar',
bar: 'foo'
} : { foo: 'bar' };
但这会导致代码重复(当对象有更多属性时)。
编辑我想说,我的问题与重复问题略有不同,因为我的问题是指在对象内部执行此操作,而不是在其声明之后或任何其他内容中执行此操作t 之间 var obj = { ... }
有一个公认的答案,但如果有人知道不使用扩展运算符的任何其他方法,我会很高兴。谢谢大家
最佳答案
使用展开运算符的快速方法:
const condition = false;
const foo = {
bar: 'baz',
...(condition ? {
boz: 'bat'
} : {})
};
console.log(foo);
这是有效的,因为对象文字的展开运算符对没有可枚举自身属性的对象没有任何作用。
关于javascript - 根据对象本身内的 bool 值添加或避免在对象中添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54150588/