首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaScript中,如何有条件地向对象添加成员?

在JavaScript中,如何有条件地向对象添加成员?
EN

Stack Overflow用户
提问于 2012-07-29 04:07:25
回答 25查看 324.9K关注 0票数 644

我想创建一个对象,有条件地添加一个成员。简单的方法是:

代码语言:javascript
复制
var a = {};
if (someCondition)
    a.b = 5;

现在,我想写一段更符合习惯的代码。我正在尝试:

代码语言:javascript
复制
a = {
    b: (someCondition? 5 : undefined)
};

但是现在,b是值为undefineda的成员。这不是预期的结果。

有什么方便的解决方案吗?

更新

我寻求一个解决方案,可以处理几个成员的一般情况。

代码语言:javascript
复制
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),
 };
EN

回答 25

Stack Overflow用户

回答已采纳

发布于 2012-07-29 04:45:41

在纯Javascript中,我想不出有什么比你的第一个代码片段更地道了。

但是,如果使用jQuery库并不是不可能的,那么$.extend()应该满足您的需求,因为正如文档所述:

不复制

未定义的特性。

因此,您可以这样写:

代码语言:javascript
复制
var a = $.extend({}, {
    b: conditionB ? 5 : undefined,
    c: conditionC ? 5 : undefined,
    // and so on...
});

并获得预期的结果(如果conditionBfalse,则b将不存在于a中)。

票数 135
EN

Stack Overflow用户

发布于 2016-11-12 16:22:24

我认为@InspiredJW用ES5做到了这一点,正如@trincot指出的,使用es6是一种更好的方法。但是我们可以通过使用扩散运算符,以及逻辑和短路评估来添加更多的糖:

代码语言:javascript
复制
const a = {
   ...(someCondition && {b: 5})
}
票数 1.4K
EN

Stack Overflow用户

发布于 2018-07-06 06:00:21

代码语言:javascript
复制
const obj = {
   ...(condition) && {someprop: propvalue},
   ...otherprops
}

实时演示:

代码语言:javascript
复制
const obj = {
  ...(true) && {someprop: 42},
  ...(false) && {nonprop: "foo"},
  ...({}) && {tricky: "hello"},
}

console.log(obj);

票数 171
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11704267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档