代码之家  ›  专栏  ›  技术社区  ›  Osakr

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

  •  0
  • Osakr  · 技术社区  · 6 年前

    基本上,我想知道,如果变量是假的,而不是从对象内部,我是否可以避免向对象添加属性。所以假设我有这个物体:

    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 回复  |  直到 6 年前
        1
  •  2
  •   bugs    6 年前

    使用Spread运算符执行此操作的快速方法:

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

    这是因为对象文本的扩散运算符对没有可枚举自身属性的对象不做任何操作。

        2
  •  1
  •   Naga Sai A    6 年前

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

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

    var add = false;
    var obj = { foo: 'bar'};
    if(add){
      obj.bar = 'foo'
    }
    
    console.log(obj)

    选项2: 如果条件为false,则对bar使用未定义的值,并使用json.stringify和json.parse删除条件为-false时未定义的“bar”属性。

    var add = false;
    var obj = JSON.parse(JSON.stringify({ "foo": 'bar', "bar" : add? 'foo': undefined}));
    console.log(obj);

    科迪森- https://codepen.io/nagasai/pen/zyMgxj?editors=1010