如何修复findLargestNumbers函数的空数组处理问题?
修复提取二维数组非空子数组最大值的函数问题
问题根源
你的函数在处理包含空数组的输入时,返回结果会包含空占位符,而非仅保留有效最大值。比如输入[[], [1, 2], []],当前函数返回[empty, 2, empty],不符合预期的[2]。
造成这个问题的核心原因是:你使用k[i] = ans给结果数组赋值,当跳过空数组时,对应索引的位置会被留空,最终结果数组的长度和原二维数组完全一致,而非仅包含有效结果。
修复方案
把赋值方式从k[i] = ans改为k.push(ans),这样每次找到非空子数组的最大值时,直接将值追加到结果数组的末尾,不会留下空占位符。
修复后的完整代码
function findLargestNumbers(arrayOfArrays) { let k = []; for(let i = 0 ; i < arrayOfArrays.length ; i++){ if(arrayOfArrays[i].length === 0){ continue ; } let ans = arrayOfArrays[i][0]; for(let j = 0 ; j < arrayOfArrays[i].length ; j++){ ans = Math.max(ans, arrayOfArrays[i][j]); } k.push(ans); } return k; }
可选优化方案
可以利用Math.max()的展开语法简化内层循环,省去手动遍历子数组找最大值的步骤,让代码更简洁:
function findLargestNumbers(arrayOfArrays) { const result = []; for (const subArr of arrayOfArrays) { if (subArr.length === 0) continue; result.push(Math.max(...subArr)); } return result; }
内容的提问来源于stack exchange,提问作者GSRK ROCKY
相关产品推荐
相关产品推荐

