如何用一行代码通过解构赋值从对象提取属性生成新对象?
一行实现解构提取属性生成新对象
现有对象:
let oldObj = {a: 1, b: 2, c: {d: 3}, d: 100, e: 101}
原来的写法是两行:
let {a, b, c: {d}} = oldObj let convertedObj = {a,b,d} // {a: 1, b: 2, d: 3}
你尝试的写法无效,核心原因是赋值表达式({a,b,c: {d}} = oldObj)的返回值是原对象oldObj,扩展运算符...会把原对象所有属性都展开,自然得不到目标结果。
下面提供两种可行的一行写法:
方法一:利用逗号运算符
let convertedObj = ({a, b, c: {d}} = oldObj, {a, b, d})
逗号运算符会先执行左侧的解构赋值(完成a、b、d的变量赋值),然后返回右侧的对象字面量,最终得到目标对象。
方法二:使用立即执行函数(IIFE)
let convertedObj = (({a, b, c: {d}}) => ({a, b, d}))(oldObj)
这种写法不会在外部作用域生成a、b、d这些临时变量,更干净。函数参数直接解构oldObj,然后返回组装好的目标对象,立即执行即可得到结果。
内容的提问来源于stack exchange,提问作者JakeTheSnake
相关产品推荐
相关产品推荐

