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

时间:2017-12-19 17:18:56

标签: javascript ecmascript-6 ecmascript-next ecmascript-7

ES6 / ES7中已经有很多cool features用于定义Javascript对象。但是,以下模式在Javascript中很常见:

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

if (someCondition) { 
  obj.optionalKey1 = ...;
}

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

3 个答案:

答案 0 :(得分:36)

您可以使用object spread来获得可选属性。

注意: Object Rest / Spread是ECMAScript的第4阶段提案。您可能需要babel transform才能使用它。



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);




答案 1 :(得分:5)

要指示optional密钥,如果条件为假,您可以为其分配null

const someCondition = true;

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

console.log(obj);

答案 2 :(得分:1)

  

以下模式在Javascript中很常见

不应该。具有许多不同形状的物体会导致性能损失。记录应始终包含相同的键。所以只需使用

const obj = { 
  requiredKey1: …, 
  requiredKey2: …,
  optionalKey1: someCondition ? … : undefined,
};