我想创建一个对象,有条件地添加一个成员。简单的方法是:
var a = {};
if (someCondition)
a.b = 5;
现在,我想写一段更符合习惯的代码。我正在尝试:
a = {
b: (someCondition? 5 : undefined)
};
但是现在,b
是值为undefined
的a
的成员。这不是预期的结果。
有什么方便的解决方案吗?
更新
我寻求一个解决方案,可以处理几个成员的一般情况。
a = {
b: (conditionB? 5 : undefined),
c: (conditionC? 5 : undefined),
d: (conditionD? 5 : undefined),
e: (conditionE? 5 : undefined),
f: (conditionF? 5 : undefined),
g: (conditionG? 5 : undefined),
};
发布于 2012-07-29 04:45:41
在纯Javascript中,我想不出有什么比你的第一个代码片段更地道了。
但是,如果使用jQuery库并不是不可能的,那么$.extend()应该满足您的需求,因为正如文档所述:
不复制
未定义的特性。
因此,您可以这样写:
var a = $.extend({}, {
b: conditionB ? 5 : undefined,
c: conditionC ? 5 : undefined,
// and so on...
});
并获得预期的结果(如果conditionB
为false
,则b
将不存在于a
中)。
发布于 2016-11-12 16:22:24
我认为@InspiredJW用ES5做到了这一点,正如@trincot指出的,使用es6是一种更好的方法。但是我们可以通过使用扩散运算符,以及逻辑和短路评估来添加更多的糖:
const a = {
...(someCondition && {b: 5})
}
发布于 2018-07-06 06:00:21
const obj = {
...(condition) && {someprop: propvalue},
...otherprops
}
实时演示:
const obj = {
...(true) && {someprop: 42},
...(false) && {nonprop: "foo"},
...({}) && {tricky: "hello"},
}
console.log(obj);
https://stackoverflow.com/questions/11704267
复制相似问题