You need to enable JavaScript to run this app. JavaScript 如何将嵌套单元素对象数组归一化为平铺对象数组
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript 如何将嵌套单元素对象数组归一化为平铺对象数组

二维嵌套对象数组转一维平铺数组实现方案

针对你给出的固定两层嵌套结构的数组,根据不同运行环境的兼容性要求,可选择以下对应最优解法:

  • 现代运行环境首选(代码量最少,语义最清晰)
    直接使用ES2019新增的数组原生方法flat(),该方法默认会移除数组的一层嵌套层级,完全匹配当前场景的结构特征:
    var arr = [ [{a:1}], [{b:1}], [{c:1}], [{d:1}], [{e:1}] ]
    var flatArr = arr.flat()
    // 最终输出:[{a:1},{b:1},{c:1},{d:1},{e:1}]
    
    所有现代浏览器、Node.js 11及以上版本均支持该方法,无需引入任何第三方依赖,是该场景下的最优实现。
  • 低版本环境兼容方案
    1. 支持ES6语法的环境可直接使用concat结合展开运算符实现,效果和flat()完全一致:
      var flatArr = [].concat(...arr)
      
      原理是将原数组的每个子数组作为入参传给concat方法,自动将分散在各子数组中的对象拼合为同一维度的一维数组。注:如果原数组元素规模超过1万条,展开运算符可能触发参数长度栈溢出,这类大数组场景优先使用原生flat()方法。
    2. 无ES6语法支持的全兼容环境,可通过手动迭代遍历实现:
      var flatArr = []
      arr.forEach(function(subArr) {
        subArr.forEach(function(item) {
          flatArr.push(item)
        })
      })
      

注意事项:如果后续遇到任意深度嵌套的同类型数组,无需修改递归逻辑,直接给flat()方法传入Infinity参数即可实现全层级无差别拍平,比如arr.flat(Infinity)可以处理任意嵌套深度的数组结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.13 02:45:01