如何将一维字符串数组转换为嵌套层级的对象?
实现一维数组转嵌套对象的简便方法
当然有简便的实现方式啦!针对你这个需求,我整理了几种既简洁又易懂的方法,都是原生JavaScript就能搞定的:
我们的目标是把一维字符串数组:
const myArr = ['lorem', 'ipsum', 'dolor', 'sit', 'amet']
转换成如下嵌套结构的对象:
{ lorem:{ ipsum:{ dolor:{ sit:{ amet: '' } } } } }
方法一:使用 Array.reduceRight()(最推荐,简洁直观)
这个方法从数组的末尾开始倒序遍历,一步步往前包裹,代码量极少:
const myArr = ['lorem', 'ipsum', 'dolor', 'sit', 'amet']; const nestedObj = myArr.reduceRight((acc, curr) => ({ [curr]: acc }), ''); console.log(nestedObj); // 输出: { lorem:{ ipsum:{ dolor:{ sit:{ amet: '' } } } } }
原理说明:初始值设为空字符串'',从最后一个元素amet开始,每次把当前元素作为对象的键,上一步生成的结构作为对应的值,最终就得到了层层嵌套的对象。
方法二:使用 Array.reduce()(正序遍历实现)
如果你习惯从数组开头开始遍历,也可以用普通的reduce,只需要跟踪当前的嵌套层级:
const myArr = ['lorem', 'ipsum', 'dolor', 'sit', 'amet']; const nestedObj = {}; myArr.reduce((currentLevel, currKey, index) => { // 最后一个元素对应空字符串,其他对应空对象 currentLevel[currKey] = index === myArr.length - 1 ? '' : {}; // 返回当前新创建的层级,供下一次遍历使用 return currentLevel[currKey]; }, nestedObj); console.log(nestedObj); // 同样得到目标嵌套结构
方法三:递归实现(适合理解嵌套逻辑)
如果想更清晰地拆解嵌套的过程,递归写法会更容易理解:
const buildNestedObject = (arr) => { // 数组为空时,返回最终的空字符串 if (arr.length === 0) return ''; // 解构出第一个元素和剩余数组 const [firstKey, ...restArr] = arr; // 递归生成嵌套结构 return { [firstKey]: buildNestedObject(restArr) }; }; const myArr = ['lorem', 'ipsum', 'dolor', 'sit', 'amet']; const nestedObj = buildNestedObject(myArr); console.log(nestedObj); // 结果完全符合需求
这三种方法都能完美实现你的需求,其中reduceRight的写法最简洁,日常开发中用得最多~
内容的提问来源于stack exchange,提问作者Magda
相关产品推荐
相关产品推荐

