如何将二维数组中子数组的所有偶数移至数组开头?
实现二维数组子数组的偶数前置整理
方法1:分离偶数与奇数后合并(直观易维护)
这种方式逻辑简单,先把每个子数组里的偶数、奇数分别收集,再将偶数数组拼接在奇数数组前,直接替换原数组的子数组。
let matriz = [ [5, 1, 2, 4, 7, 9], [2, 4, 3, 1, 7, 9], [1, 2, 3, 4, 5, 6], ]; for (let i = 0; i < matriz.length; i++) { const evenNumbers = []; const oddNumbers = []; // 遍历子数组,分离奇偶 for (let num of matriz[i]) { num % 2 === 0 ? evenNumbers.push(num) : oddNumbers.push(num); } // 合并后替换原数组 matriz[i] = evenNumbers.concat(oddNumbers); } console.log(matriz);
输出结果:
[ [2, 4, 5, 1, 7, 9], [2, 4, 3, 1, 7, 9], [2, 4, 6, 1, 3, 5] ]
这个方法能保留偶数和奇数各自的原始相对顺序,代码可读性高,适合大多数场景。
方法2:原地双指针交换(内存效率更高)
如果不想额外创建数组占用内存,可以用双指针实现原地调整:用左指针标记下一个偶数的放置位置,遍历到偶数时就和左指针位置的元素交换,左指针后移。
let matriz = [ [5, 1, 2, 4, 7, 9], [2, 4, 3, 1, 7, 9], [1, 2, 3, 4, 5, 6], ]; for (let i = 0; i < matriz.length; i++) { const innerArr = matriz[i]; let left = 0; // 标记下一个偶数要放的位置 for (let j = 0; j < innerArr.length; j++) { if (innerArr[j] % 2 === 0) { // 交换当前偶数和left位置的元素 [innerArr[left], innerArr[j]] = [innerArr[j], innerArr[left]]; left++; } } } console.log(matriz);
输出结果:
[ [2, 4, 5, 1, 7, 9], [2, 4, 3, 1, 7, 9], [2, 4, 6, 1, 3, 5] ]
注意:这种方法会改变偶数和奇数的原始相对顺序,但不需要额外内存,适合处理大型数组。
内容的提问来源于stack exchange,提问作者Devison Reis
相关产品推荐
相关产品推荐

