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,提问作者レオナルド
相关产品推荐
相关产品推荐

