ES6 Javascript简写方式创建属性(仅在属实的情况下

时间:2018-07-18 11:37:30

标签: javascript ecmascript-6

假设我有

const {status} = req.body;

仅当状态具有真实值(nullundefined空字符串之外,我才希望在查询对象中包含状态 ),

目前我正在这样做,

const query = {
   otherCondition: 1,
};

if (status) {
  query.status = status;
}

有什么方法可以避免使用ES6 Object速记的if子句吗?

如果我使用

const query = {
   otherCondition: 1,
   status,
}

状态为undefined时会生成

{
   otherCondition: 1,
   status: "undefined",
}

2 个答案:

答案 0 :(得分:7)

您可以将object spreadshort circuit evaluation结合使用:

...status && { status }

如果status是一个伪造的值,则所计算的表达式不会“返回”对象,并且spread将忽略它。如果它是一个真实值,则短路将“返回” { status }对象,并且散布将以正常方式起作用:

虚假

const {status} = {};

const query = {
   otherCondition: 1,
   ...status && { status }
};

console.log(query);

const {status} = { status: 5 };

const query = {
   otherCondition: 1,
   ...status && { status }
};

console.log(query);

答案 1 :(得分:0)

const status = null;
{
   otherCondition: 1,
   status: (status) ? status: false,
}

这将返回

{
   otherCondition: 1,
   status: false,
}