推荐答案
const filterUsingReduce = (array, callback) => {
return array.reduce((acc, current, index, arr) => {
if (callback(current, index, arr)) {
acc.push(current);
}
return acc;
}, []);
};本题详细解读
1. 函数定义
filterUsingReduce是一个自定义函数,接受两个参数:array:需要过滤的数组。callback:过滤条件函数,用于判断数组中的每个元素是否应该被保留。
2. 使用 reduce 实现过滤
reduce方法接受两个参数:- 回调函数:用于处理数组中的每个元素。
- 初始值:这里是一个空数组
[],用于存储过滤后的结果。
3. 回调函数的参数
acc:累加器,初始值为空数组[]。current:当前处理的数组元素。index:当前元素的索引。arr:原始数组。
4. 过滤逻辑
- 在每次迭代中,调用
callback函数,传入当前元素、索引和原始数组。 - 如果
callback返回true,则将当前元素push到累加器acc中。 - 最后返回累加器
acc,即过滤后的数组。
5. 示例
const numbers = [1, 2, 3, 4, 5]; const isEven = (num) => num % 2 === 0; const evenNumbers = filterUsingReduce(numbers, isEven); console.log(evenNumbers); // 输出: [2, 4]
在这个示例中,filterUsingReduce 函数使用 reduce 方法实现了与原生 filter 方法相同的功能,过滤出数组中的偶数。