如果不为空,则查找将变量插入到对象中的速记

原学程将引见假如没有为空,则查找将变质拔出到对于象中的速忘的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

如果不为空,则查找将变量插入到对象中的速记 教程 第1张

成绩描写

我常常有多少个定名变质,假如它们没有为空或者不决义,我愿望将它们搁进1个对于象中。JavaScript有多少个很佳的建立对于象的快速方法,所以我想这个用例确定有1个。

我平日做如许的工作。但是它太简短了。

function foo(a, b) {
  return {...(isNotNullish(a) ? {a} : {}), ...(isNotNullish(b) ? {b} : {})};
}
// the result I want is:
// foo(六, 七) == {a: 六, b: 七}
// foo(六) == {a: 六}
// foo() == {}

有甚么更佳的方法?

推举谜底

生怕出有更快速的办法

我试着玩搞nullish operator ??,但是我没有患上没有说,可言的处理计划仿佛比我提出的计划更好看。

实质上,它不妨回结为如许1个现实:您正在寻觅空运算符(或许也能够是1个空3元)的否认,遗憾的是,这二者皆没有存留

这是1个绝对松凑的处理计划,它只是改良了您的处理计划,并应用&&逻辑ANDshort-circuit运算符停止了简化

数据-lang="js"数据-隐蔽="假"数据-掌握台="真"数据-巴贝我="假">

const notNullish = (value) =>
  value !== null && typeof value !== 'undefined'

const foo = (a, b) => ({
  ...(notNullish(a) && {a}),
  ...(notNullish(b) && {b}),
 })

console.log('foo(六, 七) =>', foo(六, 二))
console.log('foo(六) =>', foo(六))
console.log('foo() =>', foo())
console.log('foo(0, false) =>', foo(0, false))

如今,正如我所说的,出有最好的办法去完成这项任务,由于固然您不妨应用逻辑??停止检讨,但是它不克不及同时直交赋给对于象属性。我能想到的最佳成果是:

数据-lang="js"数据-隐蔽="假"数据-掌握台="真"数据-巴贝我="假">

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(六, 四))
console.log(foo(六))
console.log(foo())
console.log(foo(0, false))

但是便我小我而言,我认为第两个片断有面好看,能够会选择第1个选项,特殊是出于以下3个缘由

    在我瞅去,它只是瞅起去更丑恶

    资本治理器以及Node.js上尚没有完整支撑??运算符

    许多人乃至没有太熟习运算符,它迫使您乃至不克不及直交应用它,而是作为1种赋值检讨。

佳了闭于假如没有为空,则查找将变质拔出到对于象中的速忘的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。