JavaScript嵌套数组层级元素数量统计实现方案
解决方案:统计嵌套数组各层级元素数量
需求明确
给定一个包含嵌套子数组的混合类型数组,需要统计每一层级的总元素数量:
- 最外层是第0层级,元素数为数组本身的长度
- 若同一层级存在多个子数组,这些子数组内的所有元素都归属于下一层级,累计计入该层级总数
实现思路
通过扩展Array的原型方法elementsAtLevels,用递归遍历嵌套数组,逐层统计对应层级的元素数量。
完整代码实现
Array.prototype.elementsAtLevels = function(level, levelData) { // 初始化层级与统计对象 if (level === undefined) { level = 0; } else { level += 1; } if (levelData === undefined) { levelData = {}; } // 记录当前层级的元素数量 if (levelData[level] === undefined) { levelData[level] = this.length; } else { levelData[level] += this.length; } // 递归遍历子数组,统计下一层级 this.forEach(item => { if (Array.isArray(item)) { item.elementsAtLevels(level, levelData); } }); return levelData; };
代码解释
- 参数初始化:
- 首次调用时,
level默认从0开始,levelData默认创建空对象存储统计结果 - 递归调用子数组时,层级
level自动+1,确保子数组元素计入下一层级
- 首次调用时,
- 层级计数:
- 每进入一个数组(外层或子数组),都会将当前数组长度累加到对应层级的计数中
- 递归遍历:
- 遍历当前数组的每个元素,若元素是数组则递归调用方法,实现深度遍历统计
使用示例
// 测试混合嵌套数组 const testArray = [1, [2, 3], [4, [5, 6], 7], 8]; const result = testArray.elementsAtLevels(); console.log(result); // 输出:{0: 4, 1: 5, 2: 2} // 解释: // 第0层:外层数组的4个元素(1、[2,3]、[4,[5,6],7]、8) // 第1层:两个子数组的元素总和:[2,3]的2个 + [4,[5,6],7]的3个 = 5个 // 第2层:最内层子数组[5,6]的2个元素
内容的提问来源于stack exchange,提问作者SumNeuron
相关产品推荐
相关产品推荐

