js实现filter
实现 JavaScript 的 filter 方法
JavaScript 的 filter 方法是数组原型上的一个高阶函数,用于创建一个新数组,包含通过指定函数测试的所有元素。以下是几种实现方式:
原生 Array.prototype.filter 的使用
原生 filter 方法接受一个回调函数,该函数会对数组的每个元素执行测试。回调函数返回 true 的元素会被包含在新数组中。
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]
手动实现 filter 方法
可以通过扩展 Array.prototype 或直接编写函数来手动实现 filter 的功能。
function customFilter(array, callback) {
const result = [];
for (let i = 0; i < array.length; i++) {
if (callback(array[i], i, array)) {
result.push(array[i]);
}
}
return result;
}
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = customFilter(numbers, num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]
使用 reduce 实现 filter
reduce 方法也可以用来实现 filter 的功能,通过累积满足条件的元素。
function filterWithReduce(array, callback) {
return array.reduce((acc, current, index, arr) => {
if (callback(current, index, arr)) {
acc.push(current);
}
return acc;
}, []);
}
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = filterWithReduce(numbers, num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]
注意事项
- 回调函数的参数依次为当前元素、索引和原数组。
filter不会改变原数组,而是返回一个新数组。- 如果没有任何元素通过测试,则返回空数组。







