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

JavaScript实现partition数组拆分函数问题:回调使用错误求指导

代码错误点

  • 硬编码了判断逻辑:当前代码直接写死了arr[i] % 2 === 0的奇偶判断规则,完全没有用到传入的第二个callback回调参数,不符合需求中「根据回调返回值决定元素归属」的要求,通用性为0,只能实现奇偶拆分场景,换判断规则(比如判断数值是否大于10)就完全失效。

正确解决思路

  • 遍历数组每一个元素时,把当前元素、对应下标、原始数组作为参数传入callback执行,拿到返回的布尔值
  • 如果返回值为true,将当前元素推入左侧数组,否则推入右侧数组
  • 遍历完成后返回由左右数组组成的二维数组

回调函数的处理方法说明

回调函数是作为参数传入另一个函数的函数,核心作用是让调用方可以自定义工具函数的核心逻辑,大幅提升函数的通用性。
本需求中调用回调时,建议遵循JS数组类内置方法的通用规范,给回调传入三个参数:当前遍历元素、当前元素下标、原始数组,可以满足更多自定义判断的场景。

修正后的完整代码

const partition = function(arr, callback) {
  const leftArr = [];
  const rightArr = [];

  for (let i = 0; i < arr.length; i++) {
    // 调用回调拿到判断结果
    const isMatch = callback(arr[i], i, arr);
    if (isMatch) {
      leftArr.push(arr[i]);
    } else {
      rightArr.push(arr[i]);
    }
  }
  return [leftArr, rightArr];
};

使用示例

const numArr = [1,2,3,4,5,6];
// 场景1:按奇偶拆分
const [evenArr, oddArr] = partition(numArr, (num) => num % 2 === 0);
console.log(evenArr); // [2,4,6]
console.log(oddArr); // [1,3,5]

// 场景2:按是否大于3拆分
const [gt3Arr, lte3Arr] = partition(numArr, (num) => num > 3);
console.log(gt3Arr); // [4,5,6]
console.log(lte3Arr); // [1,2,3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:36:06