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
相关产品推荐
相关产品推荐

