ES6/ES7中"可选"对象键的简洁/简洁语法?

And*_*Mao 29 javascript ecmascript-6 ecmascript-7 ecmascript-next

ES6/ES7 中已经有很多很酷的功能来定义Javascript对象.但是,以下模式在Javascript中很常见:

const obj = { 
  requiredKey1: ..., 
  requiredKey2: ... 
};

if (someCondition) { 
  obj.optionalKey1 = ...;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用可选键和必需键同时定义对象?

Ori*_*ori 71

您可以使用对象传播来拥有可选属性.

注意: Object Rest/Spread是ECMAScript的第4阶段提案.您可能需要使用babel变换来使用它.

let flag1 = true;
let flag2 = false;

const obj = { 
  requiredKey1: 1, 
  requiredKey2: 2,
  ...(flag1 && { optionalKey1: 5 }),
  ...(flag2 && { optionalKey2: 6, optionalKey3: 7 }),
  ...(flag1 && { optionalKey4: 8, optionalKey5: 9 })
};

console.log(obj);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您不需要括号。例如。`...flag1 && { optionalKey1: 5 },` 也可以。 (3认同)
  • 注意:这将使任何吸气剂变成静态值。 (2认同)

Sur*_*yan 5

要指示optional键,您可以分配给它null,如果条件为假

const someCondition = true;

const obj = { 
  requiredKey1: 1, 
  requiredKey2: 2,
  optionalKey1: someCondition ? 'optional' : null
};

console.log(obj);
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但值得注意的是,通过这样做,如果条件为假(并且值为 null),`optionalKey1` 仍然显示为对象的键之一,而 OPs 原始片段将创建一个完全缺少键的对象如果条件为假。 (13认同)