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

是否有较短的语法用于在对象中有条件地设置属性?[副本]

储承
2023-03-14

我正试图找到一个既有形式又有功能的解决方案。下面是两个问题的例子,一个是功能失调,但具有我想要达到的形式水平,另一个是功能失调,但繁琐。

const foo = "Spam";
const bar = () => "Ham";
const qux = (bool) => bool ? "Eggs" : "Beans";

// This is roughly the level of succintless I'd like to achieve
function genObjectPretty(request) { 
  return {
    foo: request.foo && foo,
    bar: request.bar && bar(),
    qux: request.qux && qux(true),
  }
}

console.log("BAD results, with SHORT code.  (bar should not be included)")
console.log(genObjectPretty({foo: true, qux: true}));


// This is the working code which I'd like to make less verbose
function genObjectFunctional(request) { 
  const out = {};
  if (request.foo) { out.foo = foo; }
  if (request.bar) { out.bar = bar(); }
  if (request.qux) { out.qux = qux(true); }
  return out;
}

console.log("GOOD results, but LONG code")
console.log(genObjectFunctional({foo: true, qux: true}));

上面的例子是我正在做的一个非常简短的版本,只包括3个属性。在实践中,我有更多,所以如果(this=that)}的数量越来越多。。。不是失控,而是丑陋。我希望它看起来不那么毛茸茸的。

无论如何,有没有什么js技巧可以有条件地不设置对象的属性?

我对使用助手函数持开放态度,或者在最后有几行。就像我说的,在实践中,我试图清理的不仅仅是3行。

共有1个答案

谢骏奇
2023-03-14

您可以传播未定义的对象或获取具有所需属性/值的对象。结果要么是没有属性,要么是具有值的所需属性。

js prettyprint-override">function genObjectPretty(request) { 
    return {
        foo: request.foo && foo,
        ...request.bar && { bar: bar() },
        qux: request.qux && qux(true),
    };
}

const foo = "Spam";
const bar = () => "Ham";
const qux = (bool) => bool ? "Eggs" : "Beans";

console.log(genObjectPretty({ foo: true, qux: true }));
 类似资料:
  • 是否有一些基于条件设置属性的语法? 我希望将express设置为一个值或根本不设置(即,不应该有名为express的键),并且在定义后没有额外的语句。我知道我可以将其用作布尔值,但接收端正在使用一个检查,我想知道是否可以避免修改它。 编辑:似乎没有直接解决上述问题的方法。以下是建议: JSON。stringify(Chris Kessel,dystroy): 匿名函数(Paulpro): 一个额外

  • 这是我的代码: 只有当tipus==“hianyos”时,我如何才能将rang属性添加到对象?

  • 我想有条件地向对象添加一个属性。目前我有这个: 问题是如果汽车。电池不存在我有电池:未定义。如果对象中不存在该属性,我宁愿不要该属性。我怎样才能做到这一点?

  • 我想有条件地显示和隐藏这个按钮组,这取决于从父组件传递的内容,看起来像这样: .... .... 然而,{this.props.showBulkActions'show':'hidden'并没有发生任何事情。我做错什么了吗?

  • 问题内容: 我需要能够根据作用域上的布尔变量向元素添加例如“ contenteditable”。 使用示例: 如果设置为,将导致contenteditable = true被添加到元素。有一些简单的方法可以实现这种ng- class这样的属性行为吗?我正在考虑编写指令,如果没有,请共享。 编辑: 我可以看到我提议的attrs指令和ng-bind- attrs 之间似乎有些相似之处,但是在1.0.0

  • 我们公司的一些团队目前正在“升级”一些遗留项目以使用Flyway。一个问题是存在多个具有已可用数据库对象(基线)的安装。 我们目前有一个用例(将来肯定会有更多),我们必须创建一些新的迁移脚本,但它们只能在满足数据库当前状态的特定条件时运行。 例如:运行此脚本,但仅当数据库中的表 X 包含数据 Y 时 我已经看到了Flyway条件数据库迁移,但对我来说,这似乎不是正确的解决方案,因为条件不仅仅是一些