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

根据对象本身中的布尔值,在对象中添加或避免添加属性[重复]

刘博雅
2023-03-14

基本上,我想知道如果变量为false,但来自对象内部,是否可以避免将属性添加到对象中。假设我有一个物体:

var obj = { foo: 'bar', bar: 'foo' };

现在我想重写同一个对象,但我只想在新变量(布尔值)为真的情况下添加第二个属性。问题是我如何做到这一点,例如使用这样的三元运算符:

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' };

但这会导致代码重复(当对象具有更多属性时)。

编辑我想说我的问题与重复项略有不同,因为我的问题是指在对象内部进行,而不是在其声明之后,也不是在var obj={...}之间的任何事情。有一个公认的答案,但我希望有人知道任何其他不使用扩展运算符的方法。谢谢大家

共有2个答案

戚阳
2023-03-14

为了达到预期的结果,使用下面的选项,根据单独行中的条件添加属性

https://codepen.io/nagasai/pen/ebQmrb?editors=1010

js prettyprint-override">var add = false;
var obj = { foo: 'bar'};
if(add){
  obj.bar = 'foo'
}

console.log(obj)
宇文嘉勋
2023-03-14

使用spread操作符的一种快速方法

const condition = false;

const foo = {
  bar: 'baz',
  ...(condition ? {
    boz: 'bat'
  } : {})
};

console.log(foo);
 类似资料:
  • 我正在创建一个简单的购物车,用户可以在其中添加他们希望添加到购物车中的商品数量。 我有一个门票数组,我正在传入我的页面: 总的想法是,我会为用户提供一个输入,以表明他们想要购买的数量。一旦输入发生变化,一个新的“数量”属性将被添加到ticket对象中。 我已经阅读了文档并意识到: Vue不允许向已创建的实例动态添加新的根级反应性属性。但是,可以使用Vue.set(对象、键、值)方法将反应性属性添加

  • 问题内容: 这件事困扰了我一段时间。我为什么不能做: …虽然我可以执行以下操作? 这是什么规则?您能给我介绍一下吗? 问题答案: 您可以向具有的任何对象添加属性。 例如,没有它。 字符串和其他简单的内置对象也没有它。 使用类也没有它。 除非前面的声明适用,否则用定义的类都具有它。 如果使用/的对象没有/ ,通常是为了节省空间。例如,如果有一个命令,那就太过分了- 想象一下一个非常短的字符串的膨胀程

  • 问题内容: 嗨:在我们的应用程序中,我们已经从数据库中检索了一些数据,例如,表中包含以下字段:id,名称,年龄,地址,电子邮件。 然后,我们将根据客户提供一些这些属性。 如果客户需要ID,名称,我们将获得ID名称;如果客户需要ID,名称,年龄,则将获得ID,名称,年龄。 现在,我们想创建一个包装这些属性的类。但是,我们不知道确切要求哪个字段。 我可以在这里用Class替换地图吗? 问题答案: 如果

  • 我想向云Firestore中已存在的对象添加新的属性 如您所见,我只是向一个对象添加了新属性。 现在这段代码每次都用旧属性覆盖新属性。

  • 问题内容: 考虑以下代码示例: 从PHP 5.3开始,这将产生(类似)以下输出: 但是下面的代码: …仅发出错误: 为什么将这些属性“添加”到对象?请注意,它们没有定义为手册页DateTime`上的类的一部分。 问题答案: 发生了一些魔术,但这很简单。 DateTime类没有您要访问的公共变量“date”。但是,作为PHP工作方式的副作用,在该类上调用print_r或var_dump时会创建一个变

  • 问题内容: 我要返回一个Mongoose文档,并希望在发送之前向其中添加一些元数据。但是,我无法添加任何属性,我不确定为什么。我检查了它是否可以使用Object.isExtensible(doc)扩展。 可能是什么问题? 问题答案: 啊..我的对象是一个Mongoose文档,不允许添加属性。解决方案是将返回的文档转换为普通对象,或者在查询中调用lean()。