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

如何实现先返回数组奇数元素再返回偶数元素的JavaScript函数?

解决数组奇偶元素分离问题:先奇数后偶数

嘿,我来帮你搞定这个函数!先看看你代码里的几个小问题,再给你正确的实现思路和代码~

你的代码里的问题

  • 判断对象错误:你用arr % 2来判断奇偶,但arr是整个数组,数组本身取模没有意义,应该判断每个遍历到的元素elem的奇偶性。
  • 逻辑不符合需求:你的filter只尝试筛选偶数,但需求是先返回所有奇数,再返回所有偶数,需要分开筛选再合并。
  • 缺少返回值:函数最后没有return result,所以调用后不会返回任何结果。
  • 调用参数错误:你传了二维数组[[...]],但函数需要的是一维数组[...]。

正确的实现思路

要实现“先奇数后偶数”的需求,步骤很清晰:

  1. 从输入数组中筛选出所有奇数(注意处理负数的情况)
  2. 从输入数组中筛选出所有偶数
  3. 将奇数数组和偶数数组合并,返回合并后的结果

完整代码实现

export const sameParityFilter = (arr = []) => {
  // 筛选奇数:用Math.abs处理负数,确保判断准确
  const oddNumbers = arr.filter(elem => Math.abs(elem) % 2 === 1);
  // 筛选偶数
  const evenNumbers = arr.filter(elem => Math.abs(elem) % 2 === 0);
  // 合并数组:先奇数,后偶数
  return [...oddNumbers, ...evenNumbers];
}

// 正确的调用示例
console.log(sameParityFilter([-1, 0, 1, -3, 10, -2])); // 输出: [-1, 1, -3, 0, 10, -2]
console.log(sameParityFilter([2, 0, 1, -3, 10, -2])); // 输出: [1, -3, 2, 0, 10, -2]

补充说明

  • 负数处理:在JavaScript中,-1 % 2的结果是-1,直接用elem % 2 !== 0也能识别奇数,但用Math.abs(elem) % 2 === 1更直观,避免对负数取模的困惑。
  • 顺序保持:这个实现会保留原数组中奇数和偶数各自的相对顺序,比如原数组里的奇数-1在1前面,结果里也会保持这个顺序。
  • 空数组兼容:参数默认值设为[],所以当没有传参或传空数组时,函数会返回空数组,符合预期。

内容的提问来源于stack exchange,提问作者Dmitry Chernyak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:14:06