3 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
恐怕沒(méi)有真正更短的方法來(lái)做到這一點(diǎn)(從技術(shù)上講,是一種較小的方法,然后是一種更遲鈍的方法)
我嘗試使用nullish 運(yùn)算
??
符,但我不得不說(shuō)工作解決方案似乎比我提出的方案更丑陋。本質(zhì)上,它歸結(jié)為這樣一個(gè)事實(shí):您正在尋找 nullish 運(yùn)算符的否定(或者 nullish 三元),遺憾的是這兩個(gè)運(yùn)算符都不存在。
這是一個(gè)相對(duì)緊湊的解決方案,它只是改進(jìn)了您的解決方案,并通過(guò)使用邏輯&&
AND簡(jiǎn)化了它短路操作員
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))
現(xiàn)在正如我所說(shuō),沒(méi)有最佳的方法來(lái)做到這一點(diǎn),因?yàn)殡m然您可以使用邏輯??來(lái)檢查,但它不能同時(shí)直接分配給對(duì)象屬性。我能想到的最好的辦法是:
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))
但就我個(gè)人而言,我發(fā)現(xiàn)第二個(gè)片段有點(diǎn)丑陋,可能會(huì)選擇第一個(gè)選項(xiàng),特別是出于以下三個(gè)原因
在我看來(lái),它只是看起來(lái)更丑
??
Explorer 和 Node.js 尚未完全支持該運(yùn)算符可能很多人都不熟悉該運(yùn)算符,這迫使您甚至不直接使用它,而是將其用作分配檢查。

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
我知道這是一個(gè)老問(wèn)題,但為了將來(lái)的參考,我正在尋找一種方法來(lái)做到這一點(diǎn),以防role
在創(chuàng)建我的User
. 我認(rèn)為這對(duì)于類似這樣的場(chǎng)景應(yīng)該可以很好地工作:
const user = await User.create({ email, password, ...(role && { role }) });

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
關(guān)于什么
return Object.assign({}, a, b);
它會(huì)簡(jiǎn)單地忽略空值或傳播如果對(duì)象
添加回答
舉報(bào)