如何以对象解构方式精简JS对象属性传递逻辑?
当然没问题!对象解构就是干这个的——能把你这段分散的属性赋值逻辑压缩成一行干净的代码,还完美覆盖所有需求:属性复用、重命名、自定义值、默认值设置,甚至自动忽略不需要的four属性。
直接上单行解决方案:
const dest = (({ one, three, five }) => ({ one, two: "alterTwo", threeish: three, five: five ?? 5 }))(source);
拆解一下这段代码的逻辑:
- 外层是个立即执行函数,把
source传进去当参数 - 函数内部用对象解构,从
source里只取出我们需要的三个属性:one、three、five——不需要的four自动被忽略,不用额外处理 - 返回的新对象里:
one是简写形式,等价于one: one,直接复用解构来的属性值- 直接给
two赋值自定义的"alterTwo" - 把解构来的
three重命名为threeish(也就是threeish: three) - 用ES2020的**空值合并运算符
??**给five设默认值:只有当source.five是undefined或null时,才会用5,逻辑和你原来的三元表达式完全一致,但更简洁
如果你的环境还不支持??,可以换成你原来的判断逻辑,改成:
const dest = (({ one, three, five }) => ({ one, two: "alterTwo", threeish: three, five: five !== undefined ? five : 5 }))(source);
要是觉得立即执行函数有点“花里胡哨”,也可以拆成两行更易读的版本(本质还是用了解构):
const { one, three, five } = source; const dest = { one, two: "alterTwo", threeish: three, five: five ?? 5 };
这个版本可读性更好,也完全符合你的需求。
内容的提问来源于stack exchange,提问作者tru7
相关产品推荐
相关产品推荐

