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

var a = {};
if (someCondition)
    a.b = 5;

现在,我想写一个更习惯的代码。我在努力:

a = {
    b: (someCondition? 5 : undefined)
};

但是现在,b是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),
 };

当前回答

简单的es6解决方案

带有(&)的单一条件

const didIPassExam = true Const study = { 星期一:“写作”, 周二:“阅读”, /*有条件检查,如果为真,则增加周三学习*/ ...(didIPassExam &&{星期三:'睡得开心'}) } console.log(研究)

带有(?):)

Const分数= 110 //const得分= 10 Const storage = { 答:10 b: 20, ...(得分> 100 ?{c: 30}: {d:40}) } console.log(存储)

解释

假设你有一个这样的存储对象

const storage = {
  a : 10,
  b : 20,
}

你想在此基础上有条件地增加一个道具

const score = 90

如果分数大于100,您现在希望将道具c:30添加到存储区。

如果score小于100,则需要将d:40添加到存储中。你可以这样做

const score = 110

const storage = {
  a:10,
  b:20,
  ...(score > 100  ? {c: 30} : {d:40}) 
}

上面的代码给出存储为

{
  a: 10,
  b: 20,
  c: 30
}

如果分数= 90

然后你得到存储

{
  a: 10,
  b: 20,
  d: 40
}

Codepen例子

其他回答

我希望这有助于解决你的问题

身体< > <标题> GeeksforGeeks h1 > < / < p id =“极客”> < / p > < !——检查数组包含的脚本 对象与否——> <脚本> Var obj = {"geeks1":10, "geeks2":12} Var arr = ["geeks1", "geeks2", "geeks3", obj]; 如果(加勒比海盗。过滤器(值= = = >价值obj)。长度> 0) document . write(“true”); 其他的 document . write(“false”); > < /脚本 身体< / >

这是我能想到的最简洁的解决方案:

var a = {};
conditionB && a.b = 5;
conditionC && a.c = 5;
conditionD && a.d = 5;
// ...

您可以无条件地添加所有未定义的值,然后使用JSON。Stringify将它们全部删除:

const person = {
  name: undefined,
  age: 22,
  height: null
}

const cleaned = JSON.parse(JSON.stringify(person));

// Contents of cleaned:

// cleaned = {
//   age: 22,
//   height: null
// }

我的建议如下:

const a = {
   ...(someCondition? {b: 5}: {})
}

我会这样做

var a = someCondition ? { b: 5 } : {};