JavaScript递归实现restArray函数遇问题,求技术帮助
问题分析与代码修正
原代码存在的问题
- 未实现子数组数量统计:需求要求最终结果是所有数字总和减去除最外层父数组外的子数组数量,但你的代码完全没有处理这个计数逻辑
- 空数组处理错误:原代码中遇到空数组直接返回
-1,这会错误破坏总和计算,实际空数组的数字总和为0,且它本身属于需要被计数的子数组
修正方案
我们可以通过闭包在递归过程中统计子数组数量,同时计算所有数字的总和,最后执行总和减子数组数量的操作:
var restArray = function(array) { let subArrayCount = 0; // 内部递归函数:计算当前数组的数字总和,同时统计子数组数量 const calculateSum = (arr) => { let sum = 0; for (const item of arr) { if (Array.isArray(item)) { // 每遇到一个子数组,计数+1 subArrayCount++; // 递归处理子数组,累加其内部数字总和 sum += calculateSum(item); } else { // 普通数字直接累加 sum += item; } } return sum; }; const totalSum = calculateSum(array); // 返回总和减去所有子数组的数量 return totalSum - subArrayCount; }; // 测试示例 const array = [3, [7, [5,6]], [9,6], 4]; console.log(restArray(array)); // 输出37
逻辑验证
针对示例数组[3, [7, [5,6]], [9,6], 4]:
- 所有数字总和:
3+7+5+6+9+6+4 = 40 - 子数组数量:
[7, [5,6]]、[5,6]、[9,6],共3个 - 最终结果:
40 - 3 = 37,与需求预期一致
内容的提问来源于stack exchange,提问作者Ezequiel Pratissoli
相关产品推荐
相关产品推荐

