JavaScript进阶操作之过滤filter

简介: 引入我们在日常生活中,不难遇到一个非常耗时间的工作——筛选。比如,帮老师筛查出不及格的人数,帮老总筛选出上班考勤全满的人——掘金工作人员筛选出更文数量在30以上的创作者(不是)……人肉计数和筛查显然非常低效,而且很容易出错。计算机就是用来帮我们干这件事的。很多人估计第一反应回是用循环,遍历所有元素,满足条件提出来,不满足就下一个


引入


我们在日常生活中,不难遇到一个非常耗时间的工作——筛选。

比如,帮老师筛查出不及格的人数,帮老总筛选出上班考勤全满的人——掘金工作人员筛选出更文数量在30以上的创作者(不是)……

人肉计数和筛查显然非常低效,而且很容易出错。计算机就是用来帮我们干这件事的。很多人估计第一反应回是用循环,遍历所有元素,满足条件提出来,不满足就下一个

这个是没有问题的。但是我们程序员往往会把常用的功能封装起来,形成一个可以随时调用的工具——

这就是filter


1. filter使用机理


一般用filter来过滤array中的元素。当我们把filter作用于array的时候,他本身是一个array的方法(和对象绑定的函数)。

我们需要传入的参数是一个函数,filter之后会把我们传入的函数依次对每个array中的元素作用一遍,当获得返回值是True的时候保留该元素,False的时候则丢弃该元素。最后返回一个过滤后的值,而不对原来的对象array进行修改

从机理我们可以看出,filter中需要传入的函数需要能返回布尔值。并且我们需要把过滤后的值赋给一个变量,或者直接输出出来,否则无法拿到这个结果,因为filter不改变原array。


2. filter实用案例


最经典的案例就是奇偶数过滤了:

var test1 = [1, 2, 3, 4, 5, 6, 7, 9];
var r = test1.filter(function (x) {
    return x % 2 !== 0;
});
r; // [1, 3, 5, 7, 9]

我们定义了一个array,进行filter之后希望输出奇数,那么我们就设计一个函数,函数内部进行x % 2 !== 0的判断,不等于0的时候返回True,则保留,等于0的时候即为偶数,返回False,丢弃。把结果赋值给r之后输出r即可。

还有一个实用的效果是,把传入的空字符串过滤掉:

var arr = ['A', '', 'B', null, undefined, 'C', '  '];
var r = arr.filter(function (s) {
    return s && s.trim(); // 注意:IE9以下的版本没有trim()方法
});
r; // ['A', 'B', 'C']

trim方法是用于移除字符串左右的空格


3. filter的回调函数


filter方法中支持回调函数。其中主要有三个参数可以使用,一是element,二是index,三是self。

element表示原数组的某个元素

index表示元素位置

self表示数组本身

我们可以将它们依次输出看看效果

var test1 = ['1', '2', '3'];
var r = test1.filter(function (element, index, self) {
    console.log(element); // 输出'1', '2', '3'
    console.log(index); // 输出0, 1, 2
    console.log(self); // self就是变量test1这个数组
    return true;
});

这样在日志输出中我们会看到上面的效果。array的各项参数就被提取出来了。

那么这个有什么用呢?、

我们可以利用这个来去重。去除重复元素,有经验的小伙伴应该知道,我们可以放进集合,可以循环并判断……这个filter方法可以拓宽一下大家的知识面,也相当于增加一种理解。

var r;
var test1 = ['a','b','a','c','b','c','d','e'];
r = test1.filter(function (element, index, self) {
    return self.indexOf(element) === index;
});

indexOf函数返回的是第一个元素的位置,而element则用于回调所有元素来供给判断。当第一个元素的index和当前元素的index一样的时候,说明当前元素之前没有出现,于是返回True,被filter保留下来,反之则被过滤掉。


image.png

image.png

输出成功。

相关文章
|
1月前
|
JavaScript 前端开发
JavaScript操作DOM元素
JavaScript操作DOM元素
12 1
|
1月前
|
数据采集 Web App开发 JavaScript
JavaScript爬虫进阶攻略:从网页采集到数据可视化
JavaScript爬虫进阶攻略:从网页采集到数据可视化
|
1月前
|
JavaScript 前端开发
如何使用 JavaScript 操作 DOM?
如何使用 JavaScript 操作 DOM?
13 0
|
1月前
|
JavaScript 前端开发
解释 JavaScript 中的`map()`、`filter()`和`reduce()`方法的用途。
解释 JavaScript 中的`map()`、`filter()`和`reduce()`方法的用途。
19 1
|
2天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
10天前
|
存储 JavaScript 前端开发
JavaScript DOM 操作:解释一下 cookie、sessionStorage 和 localStorage 的区别。
Cookie是服务器发送至客户端的文本信息,会随每个请求发送回服务器,适合控制会话状态但可能暴露隐私。SessionStorage仅在当前会话中存储数据,关闭浏览器后清除,适合临时存储如登录状态。LocalStorage则持久保存数据,即使关闭浏览器也不会清除,适用于存储长期设置。三种方式各有侧重,应按需求选择。
15 0
|
10天前
|
JavaScript 前端开发 安全
JavaScript DOM 操作:解释一下浏览器的同源策略。
**同源策略**是浏览器安全基石,它阻止脚本跨不同协议、域名或端口访问资源,防止恶意行为。例如,HTTP页面无法直接用JS获取HTTPS页面内容。**CORS**允许跨域请求,但需服务器配合设置,通过`document.domain`属性可配置,但仍受限于服务器配置。
14 4
|
16天前
|
JavaScript
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
|
1月前
|
JavaScript 前端开发
JavaScript操作BOM简单案例
JavaScript操作BOM简单案例
9 1
|
1月前
|
JavaScript 前端开发
JavaScript操作BOM对象
JavaScript操作BOM对象
9 1