如何将JavaScript数组转换为嵌套子对象结构?
实现JavaScript单层数组到层级嵌套结构的转换
需求描述
给定以下JavaScript单层数组:
const array = [ { number: 1, name: 'one', child: [] }, { number: 2, name: 'two', child: [] }, { number: 3, name: 'three', child: [] } ];
需要将其转换为如下层级嵌套的结构:
const nested = [ { number: 1, name: 'one', child: [ { number: 2, name: 'two', child: [ { number: 3, name: 'three', child: [] } ] } ] } ];
实现方法
可以通过倒序遍历数组的方式构建嵌套结构,从最后一个元素开始,依次将当前元素嵌套进前一个元素的child数组中,最终返回仅包含第一个元素的数组。
代码实现
function convertToNested(arr) { // 复制原数组,避免修改原始数据 const copy = [...arr]; // 从倒数第二个元素开始向前遍历 for (let i = copy.length - 2; i >= 0; i--) { // 将后一个元素放入当前元素的child数组 copy[i].child.push(copy[i + 1]); } // 返回嵌套完成的结构 return [copy[0]]; } // 测试示例 const array = [ { number: 1, name: 'one', child: [] }, { number: 2, name: 'two', child: [] }, { number: 3, name: 'three', child: [] } ]; const nested = convertToNested(array); console.log(nested);
思路说明
- 先复制原数组,防止操作过程中破坏原始数据;
- 倒序遍历从倒数第二个元素启动,因为最后一个元素不需要嵌套子元素;
- 每一步将当前元素的下一个元素推入它的
child数组,逐步搭建层级关系; - 最终返回只包含第一个元素的数组,此时第一个元素已经包含所有后续嵌套的子元素。
这个方法适用于任意长度的顺序数组,只要数组元素的顺序符合嵌套层级的先后关系即可。
内容的提问来源于stack exchange,提问作者Omid Khodarahmi
相关产品推荐
相关产品推荐

