如何修正JS从数组取偶数生成5×5矩阵时数值重复的问题
问题修复方案
问题根源
- aux的定位完全错误:它本该记录下一轮遍历原数组的起始下标,你却错误将其赋值为动态变化的
column值,导致下一行起始位置回溯,出现重复元素 - 全局修改
column的逻辑完全多余,反而干扰了遍历边界判断
修复后的代码
function matrix(array) { const row = 5 const perRowCount = 5 // 固定每行需要5个元素 let aux = 0 // 记录原数组已遍历到的下标位置 const result = [] // 存储最终5×5矩阵 for (let i = 0; i < row; i++) { const newArray = [] // 凑够当前行的5个偶数就停止 while (newArray.length < perRowCount && aux < array.length) { const currentVal = array[aux] if (currentVal % 2 === 0) { newArray.push(currentVal) } aux++ // 无论元素是否符合要求,遍历过的下标都要后移 } result.push(newArray) console.log(newArray.join(' ')) } return result } matrix([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50])
输出结果
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50
核心修改点
- 去掉动态修改
column的冗余逻辑,固定每行需要收集的元素数量为5 aux每次遍历都自增1,记录已经处理过的原数组下标,保证不会重复遍历之前的元素- 改用
while循环处理单行元素收集,逻辑更清晰,避免嵌套for循环的边界判断混乱
内容的提问来源于stack exchange,提问作者Antonio contreras
相关产品推荐
相关产品推荐

