如何将含单个嵌套对象的对象转换为单层对象?附代码示例
解决方案:对象扁平化与属性重组
嘿,这个需求很容易实现,我给你分享两种常用的JavaScript方案,都是简洁易懂的:
方案一:使用ES6对象展开运算符(推荐)
这是最直观简洁的写法,利用ES6的展开语法直接把嵌套的abc对象展开,同时保留原有的d属性,再添加id属性:
var myObj = { abc:{a:1, b:2, c:3}, d:4 }; // 解构取出abc和d,然后重组 var { abc, d } = myObj; var newObj = { ...abc, d, id: 'abc' }; console.log(newObj); // 输出:{ a:1, b:2, c:3, d:4, id:'abc' }
代码解释:
var { abc, d } = myObj:通过对象解构,从myObj中直接提取出abc对象和d属性的值{ ...abc, d, id: 'abc' }:用展开运算符...把abc里的所有属性平铺到新对象中,然后添加d属性(这里用了属性简写,等同于d: d),最后加上id属性
方案二:使用Object.assign(兼容旧环境)
如果需要兼容不支持ES6的旧环境,可以用Object.assign方法来合并对象:
var myObj = { abc:{a:1, b:2, c:3}, d:4 }; var newObj = Object.assign({}, myObj.abc, { d: myObj.d, id: 'abc' }); console.log(newObj); // 输出:{ a:1, b:2, c:3, d:4, id:'abc' }
代码解释:
Object.assign({}, target1, target2):第一个参数是目标空对象,后面的参数是要合并进去的对象/属性- 先把
myObj.abc的所有属性合并到空对象,再合并{ d: myObj.d, id: 'abc' }里的属性,最终得到想要的结构
两种方案都能完美实现你的需求,优先推荐方案一,代码更简洁易读~
内容的提问来源于stack exchange,提问作者Francisr
相关产品推荐
相关产品推荐

