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

Javascript 是否有较短的语法用于在对象中有条件地设置属性?,javascript,Javascript,我试图找到一个既有形式又有功能的解决方案。下面是两个问题的例子,一个是功能失调但有我想要达到的形式水平,另一个是功能失调但单调乏味 const foo=“垃圾邮件”; 常数条=()=>“火腿”; 常量qux=(bool)=>bool?“蛋”:“豆”; //这大概是我想要达到的简洁程度 函数genObjectPretty(请求){ 返回{ foo:request.foo&&foo, bar:request.bar&&bar(), qux:request.qux&&qux(true), } } l

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

const foo=“垃圾邮件”;
常数条=()=>“火腿”;
常量qux=(bool)=>bool?“蛋”:“豆”;
//这大概是我想要达到的简洁程度
函数genObjectPretty(请求){
返回{
foo:request.foo&&foo,
bar:request.bar&&bar(),
qux:request.qux&&qux(true),
}
}
log(“错误的结果,代码很短。(不应包括条形图)”)
log(genObjectPretty({foo:true,qux:true}));
//这是我想减少冗长的工作代码
函数genObjectFunctional(请求){
const out={};
if(request.foo){out.foo=foo;}
if(request.bar){out.bar=bar();}
if(request.qux){out.qux=qux(true);}
返回;
}
log(“结果很好,但代码很长”)

log(genObjectFunctional({foo:true,qux:true}))
您可以传播
未定义的
/
或获取具有所需属性/值的对象。结果要么是没有属性,要么是所需的具有值的属性

函数genObjectPretty(请求){
返回{
foo:request.foo&&foo,
…request.bar&&{bar:bar()},
qux:request.qux&&qux(true),
};
}
const foo=“垃圾邮件”;
常数条=()=>“火腿”;
常量qux=(bool)=>bool?“蛋”:“豆”;

log(genObjectPretty({foo:true,qux:true}))
特别显示了更为复杂的实现方法,但您应该尽可能保持代码的可读性,并稍微减少冗余:
request.foo&&out.foo=foo@subrachnid,你的答案很好(也许是我目前最喜欢的答案)。我真的认为你应该把这个答案添加到这个问题上,这是一个重复的问题,因为我没有在那里找到它。这个答案有一个类似的sytnax,尽管在IMO上有一些改进。