ES6 / ES7中已经有很多cool features用于定义Javascript对象。但是,以下模式在Javascript中很常见:
const obj = {
requiredKey1: ...,
requiredKey2: ...
};
if (someCondition) {
obj.optionalKey1 = ...;
}
有没有办法用可选键和必需键一次定义对象?
答案 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,
};