You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将二维数组中子数组的所有偶数移至数组开头?

实现二维数组子数组的偶数前置整理

方法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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:50:28