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

JavaScript如何将嵌套数组转换为符合通用规则的多层对象

JavaScript多层数组转嵌套对象实现方案

实现逻辑

支持任意层级的二维数组输入,外层每一个子数组对应嵌套对象的一个层级,最后一层属性值统一为0,无需修改代码即可适配不同层数的输入。

反向遍历实现(性能更优)

从最后一层开始向前逐层构建嵌套结构,适合层数较多的场景:

function arrayToNestedObj(arr) {
  // 空输入兼容
  if (!Array.isArray(arr) || arr.length === 0) return {}

  // 初始化最后一层,所有属性值为0
  let nested = arr.at(-1).reduce((obj, key) => {
    obj[key] = 0
    return obj
  }, {})

  // 从倒数第二层向前遍历,逐层包裹
  for (let i = arr.length - 2; i >= 0; i--) {
    const currentKeys = arr[i]
    nested = currentKeys.reduce((obj, key) => {
      // 深拷贝避免多个属性共用同一个对象引用
      obj[key] = structuredClone(nested)
      return obj
    }, {})
  }

  return nested
}

递归实现(逻辑更简洁)

通过递归逐层级生成对象,无引用共用问题,代码可读性更高:

function arrayToNestedObj(arr, level = 0) {
  // 到达最后一层,生成值为0的对象
  if (level === arr.length - 1) {
    return arr[level].reduce((obj, key) => {
      obj[key] = 0
      return obj
    }, {})
  }
  // 当前层级每个属性对应下一层递归生成的对象
  return arr[level].reduce((obj, key) => {
    obj[key] = arrayToNestedObj(arr, level + 1)
    return obj
  }, {})
}

测试用例

let data = [['a', 'b'],['c', 'd'],['e', 'f', 'g', 'h']];
console.log(arrayToNestedObj(data))
// 输出与需求示例完全一致

内容的提问来源于stack exchange,提问作者レオナルド

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:36:03