ES6 Javascript速记只有在它真实时才创建属性

Kam*_*n J 4 javascript ecmascript-6

让我说我有

const {status} = req.body;
Run Code Online (Sandbox Code Playgroud)

我想包括状态在我的查询对象只有在状态有truthy值(比其他nullundefined空字符串)

目前我正在这样做,

const query = {
   otherCondition: 1,
};

if (status) {
  query.status = status;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用if子句使用ES6 Object简写来避免这种情况?

如果我用,

const query = {
   otherCondition: 1,
   status,
}
Run Code Online (Sandbox Code Playgroud)

当状态为时undefined,它会生成

{
   otherCondition: 1,
   status: "undefined",
}
Run Code Online (Sandbox Code Playgroud)

Ori*_*ori 7

您可以使用对象传播短路的评价:

...status && { status }
Run Code Online (Sandbox Code Playgroud)

如果status是假值,则计算的表达式将不会"返回"对象,并且spread将忽略它.如果它是一个truty值,短路将"返回" { status }对象,并且传播将以正常方式工作:

Falsy

const {status} = {};

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

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

Truthy

const {status} = { status: 5 };

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

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