📅  最后修改于: 2023-12-03 15:41:55.373000             🧑  作者: Mango
在JavaScript中,过滤器可以用于从数组中过滤出一组满足特定条件的元素。但有时我们需要一个更专门的过滤器,只返回一个特定的值。
假设我们有以下数组:
const arr = [12, 18, 23, 15, 11];
我们要过滤出所有偶数,可以使用以下代码:
const filteredArr = arr.filter(num => num % 2 === 0);
console.log(filteredArr); // [12, 18]
现在假设我们只是想返回一个布尔值,表示数组中是否存在偶数。我们可以使用以下代码:
const hasEven = arr.some(num => num % 2 === 0);
console.log(hasEven); // true
但如果我们只是想要返回第一个偶数,该怎么办?可以使用以下代码:
const firstEven = arr.find(num => num % 2 === 0);
console.log(firstEven); // 12
这里find()
方法会返回数组中第一个满足条件的元素。如果没有找到匹配的元素,它将返回undefined。
但如果我们确信数组中一定有偶数,我们可以使用以下代码:
const firstEven = arr.find(num => num % 2 === 0)!;
console.log(firstEven); // 12
这里我们使用感叹号来告诉TypeScript编译器,我们知道返回值一定不是undefined。
我们可以将此逻辑封装在自定义过滤器中,以便在整个应用程序中重复使用。以下是一个返回第一个偶数的过滤器:
const first = <T>(predicate: (item: T) => boolean) => (arr: T[]): T | undefined => {
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
if (predicate(item)) {
return item;
}
}
return undefined;
};
const arr = [12, 18, 23, 15, 11];
const firstEven = first((num: number) => num % 2 === 0)(arr);
console.log(firstEven); // 12
此过滤器使用了柯里化和泛型,因此可以适用于不同类型的数组和条件。
以上就是返回特定值过滤器的简介。无论您是在处理大型代码库还是只是在编写个人项目,重复使用此类小型过滤器都可以提高代码的可读性和维护性。