3 回答
TA贡献1803条经验 获得超3个赞
恐怕没有真正更短的方法来做到这一点(从技术上讲,是一种较小的方法,然后是一种更迟钝的方法)
我尝试使用nullish 运算
??
符,但我不得不说工作解决方案似乎比我提出的方案更丑陋。本质上,它归结为这样一个事实:您正在寻找 nullish 运算符的否定(或者 nullish 三元),遗憾的是这两个运算符都不存在。
这是一个相对紧凑的解决方案,它只是改进了您的解决方案,并通过使用逻辑&&
AND简化了它短路操作员
const notNullish = (value) =>
value !== null && typeof value !== 'undefined'
const foo = (a, b) => ({
...(notNullish(a) && {a}),
...(notNullish(b) && {b}),
})
console.log('foo(6, 7) =>', foo(6, 2))
console.log('foo(6) =>', foo(6))
console.log('foo() =>', foo())
console.log('foo(0, false) =>', foo(0, false))
现在正如我所说,没有最佳的方法来做到这一点,因为虽然您可以使用逻辑??来检查,但它不能同时直接分配给对象属性。我能想到的最好的办法是:
const notNullish = (key, value) => {
const nullishCheck = value ?? 'IS_NULLISH'
return nullishCheck === 'IS_NULLISH'
? {}
: {[key]: value}
}
const foo = (a, b) => ({
...notNullish('a', a),
...notNullish('b', b)
})
console.log(foo(6, 4))
console.log(foo(6))
console.log(foo())
console.log(foo(0, false))
但就我个人而言,我发现第二个片段有点丑陋,可能会选择第一个选项,特别是出于以下三个原因
在我看来,它只是看起来更丑
??
Explorer 和 Node.js 尚未完全支持该运算符可能很多人都不熟悉该运算符,这迫使您甚至不直接使用它,而是将其用作分配检查。
TA贡献1895条经验 获得超7个赞
我知道这是一个老问题,但为了将来的参考,我正在寻找一种方法来做到这一点,以防role
在创建我的User
. 我认为这对于类似这样的场景应该可以很好地工作:
const user = await User.create({ email, password, ...(role && { role }) });
添加回答
举报