JavaScript对象数组平展1层并追加父属性的实现优化问询
解决方案
原代码问题修正
你现有的代码存在笔误:展开的变量名错误,应该是当前遍历到的子元素co而非children,修正后可正常运行,但写法可以更简洁。
更简洁的实现方式
可以用flatMap语法简化嵌套写法,本质逻辑和两层循环完全一致,没有额外性能损耗,也不需要手动维护结果数组:
const eObj = obj.flatMap(parent => { // 遍历当前父元素的所有子元素,拼接父属性 return parent.children.map(child => ({ p_id: parent.id, p_name: parent.name, ...child })) }) // 如果存在父元素没有children的场景,兼容写法为 parent.children || []
关于是否可以去掉嵌套循环
无法从逻辑层面消除嵌套遍历:你需要将每一个子元素和对应的父元素属性做绑定,必须遍历所有父元素,再遍历每个父元素下的所有子元素,总遍历次数等于所有子元素的总数量,时间复杂度稳定为O(n),所有写法的底层逻辑都和你的两层循环一致,只是语法封装后看起来没有显式嵌套。
内容的提问来源于stack exchange,提问作者Samuel
相关产品推荐
相关产品推荐

