js filter实现
使用 Array.prototype.filter() 方法
filter() 是 JavaScript 数组的一个内置方法,用于创建一个新数组,包含通过指定函数测试的所有元素。该方法不会改变原数组。
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]
自定义 filter 函数实现
可以通过自定义函数模拟 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]
在对象上实现 filter 方法
可以为非数组对象(如类数组对象或自定义对象)实现类似 filter 的功能。
const obj = { a: 1, b: 2, c: 3, d: 4 };
function filterObject(object, callback) {
const result = {};
Object.keys(object).forEach(key => {
if (callback(object[key], key, object)) {
result[key] = object[key];
}
});
return result;
}
const evenValues = filterObject(obj, value => value % 2 === 0);
console.log(evenValues); // { b: 2, d: 4 }
链式调用 filter 与其他数组方法
filter 可以与其他数组方法(如 map、reduce)结合使用,实现复杂的数据处理。

const numbers = [1, 2, 3, 4, 5];
const doubledEvenNumbers = numbers
.filter(num => num % 2 === 0)
.map(num => num * 2);
console.log(doubledEvenNumbers); // [4, 8]
使用 thisArg 参数
filter 方法的第二个参数可以指定回调函数中的 this 值。
const threshold = { min: 2, max: 4 };
function isInRange(value) {
return value >= this.min && value <= this.max;
}
const numbers = [1, 2, 3, 4, 5];
const filteredNumbers = numbers.filter(isInRange, threshold);
console.log(filteredNumbers); // [2, 3, 4]
处理稀疏数组
filter 方法会跳过稀疏数组中未定义或删除的元素。
const sparseArray = [1, , 3, , 5];
const filteredArray = sparseArray.filter(num => true);
console.log(filteredArray); // [1, 3, 5]






