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) && ),
?})
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 }) });
添加回答
舉報