如何将数组对象中嵌套子结构的属性提升到对象根层级
实现对象数组结构转换的方法
你可以通过数组遍历+对象展开的方式完成转换,以下是不同场景的实现方案:
方案1:ES6+ 无副作用转换(推荐)
该方案不会修改原数组,会生成新的转换后数组,且自动适配vacation下的所有字段,无需手动枚举属性:
const originalArray = [/* 你的原始数组 */]; const result = originalArray.map(({ vacation, ...rest }) => ({ ...rest, ...vacation }));
如果你只需要保留user字段+vacation的字段,不需要其他根级字段,可以简化为以下写法,避免把不需要的冗余字段带进来:
const result = originalArray.map(item => ({ user: item.user, ...item.vacation }));
方案2:ES5 兼容写法
如果需要兼容低版本JS运行环境,可以用以下写法:
var originalArray = [/* 你的原始数组 */]; var result = originalArray.map(function(item) { // 复制原对象属性 var newItem = {}; for (var key in item) { if (key !== 'vacation') { newItem[key] = item[key]; } } // 合并vacation下的属性 for (var vKey in item.vacation) { newItem[vKey] = item.vacation[vKey]; } return newItem; });
注意事项
- 以上所有方案都是浅拷贝,如果
user字段下的嵌套对象非常复杂,只会拷贝引用,修改新数组里的user属性会同步影响原数组的对应值。如果需要深拷贝,可以自行引入深拷贝方法处理user字段。 - 如果需要直接修改原数组而非生成新数组,可以遍历数组后直接给每一项赋值
vacation下的属性,再执行delete item.vacation即可。
内容的提问来源于stack exchange,提问作者kyrylolv
相关产品推荐
相关产品推荐

