JavaScript:将存储多组对象数组的对象合并为单个对象数组的方法
你之前尝试的Lodash方法失效是有明确原因的:union的设计目标是合并含基础值的数组、做引用级去重,和当前展平嵌套数组的需求不匹配;join本身就是将数组元素拼接为字符串的方法,完全不具备数组合并能力,自然达不到效果。
原生JS实现(无需第三方依赖)
- 现代环境最简写法:
const obj2 = Object.values(obj).flat();
执行逻辑:Object.values(obj)会遍历目标对象,把每个键对应的数组值收集为二维数组,结构和你示例中的[arr0, arr1]一致;flat()默认按1层深度展平嵌套数组,最终输出的就是你需要的一维对象数组。
因为你的示例对象键是可排序的数字字符串,JS引擎遍历这类键时会按数值升序返回,所以最终顺序和你期望的obj2结构完全一致,不会出现内容错位。
- 旧环境兼容写法(不支持
flat的场景):
const obj2 = Object.values(obj).reduce((acc, cur) => acc.concat(cur), []);
执行逻辑:以空数组为初始累加器,把每个子数组依次拼接到结果中,达到和flat完全一致的效果。
Lodash 正确实现方式
如果项目已经引入了Lodash,直接用展平类方法即可,不用自己写兼容逻辑:
const obj2 = _.flatten(_.values(obj));
这里要避开之前踩的坑:不要用union,它在合并时会对对象做引用级去重,如果你后续有重复内容的场景反而会误删元素;_.flatten仅做1层嵌套展平,完全匹配你当前的结构要求。
内容的提问来源于stack exchange,提问作者RookieSA
相关产品推荐
相关产品推荐

