You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效移除对象数组的一层嵌套 实现数组扁平化

适配场景的最简实现方案

你当前的数组是刚好一层的嵌套结构,完全不需要手写遍历逐次push到新数组,用原生内置方法1行代码就能搞定,实现效率还比自写循环更高。

优先推荐:原生flat()方法(最直观)

ES2019提供的Array.prototype.flat()默认就会拉平数组的1层嵌套,和你的数据结构完全匹配:

let arr = [];
arr.push([{id:1}]);
arr.push([{id:2}, {id: 3}]);
arr.push([{id:4}]);

// 直接拉平1层即可
let res = arr.flat();
// 最终输出:[{id:1}, {id:2}, {id:3}, {id:4}]
  • 兼容说明:主流浏览器、Node.js 11+环境全支持,常规业务开发可以直接用
  • 注意事项:如果后续遇到多层不确定的嵌套,给flat()传Infinity参数可以递归拉平所有层级,但你当前的场景完全不需要,传默认值没有多余的递归开销,执行效率最高。

高兼容备用方案

如果项目需要兼容不支持flat()的老旧运行环境,可以用concat配合展开运算符实现完全一致的效果:

let res = [].concat(...arr);

这个写法的原理是把原数组的每一层元素拆出来传给concat,concat会自动把传入的数组展平后合并到结果中,兼容性比flat()好很多。
如果连展开运算符都不支持的更老环境,可以用apply实现同样逻辑:

let res = Array.prototype.concat.apply([], arr);

效果说明

针对你给出的测试数据,上面所有方法的输出结果都和你预期的一维对象数组完全一致,没有多余嵌套,代码量远少于自写遍历的方案,而且内置方法的实现是经过引擎优化的,执行性能也优于JS层手写的循环逻辑。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 07:54:01