Javascript中关于Array.filter()的妙用详解


Posted in Javascript onDecember 04, 2016

前言

和map类似,Array的filter也接收一个函数。但是和map不同的是, filter把传入的函数依次作用于每个元素,然后根据返回值是 true 还是false决定保留还是丢弃该元素。

实例介绍

例如,在一个Array中,删掉偶数,只保留奇数,可以这么写:

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

把一个Array中的空字符串删掉,可以这么写:

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

可见用 filter 这个高阶函数,关键在于正确实现一个“筛选”函数。

回调函数

filter 接收的回调函数,其实可以有多个参数。通常我们仅使用第一个参数,表示Array的某个元素。回调函数还可以接收另外两个参数,表示元素的位置和数组本身:

var arr = ['A', 'B', 'C'];
var r = arr.filter(function (element, index, self) {
 console.log(element); // 依次打印'A', 'B', 'C'
 console.log(index); // 依次打印0, 1, 2
 console.log(self); // self就是变量arr
 return true;
});

利用 filter ,可以巧妙地去除Array的重复元素:

var r,
 arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];

r = arr.filter(function (element, index, self) {
 return self.indexOf(element) === index;
});

console.log(r.toString());

去除重复元素依靠的是 indexOf 总是返回第一个元素的位置,后续的重复元素位置与 indexOf 返回的位置不相等,因此被 filter 滤掉了。

总结

以上就是关于Javascript中Array.filter()妙用的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
删除重复数据的算法
Nov 23 Javascript
javascript取消文本选定的实现代码
Nov 14 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
Apr 18 Javascript
前端设计师们最常用的JS代码汇总
Sep 25 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
Oct 30 Javascript
移动端基础事件总结与应用
Jan 12 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
Apr 06 Javascript
JS+Ajax实现百度智能搜索框
Aug 04 Javascript
使用Vue完成一个简单的todolist的方法
Dec 01 Javascript
关于单文件组件.vue的使用
Sep 20 Javascript
Javascript读写cookie的实例源码
Mar 16 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
Dec 19 Javascript
JavaScript 中对象的深拷贝
Dec 04 #Javascript
详解JavaScript模块化开发
Dec 04 #Javascript
javascript 定时器工作原理分析
Dec 03 #Javascript
JavaScript 最佳实践:帮你提升代码质量
Dec 03 #Javascript
简单理解Vue条件渲染
Dec 03 #Javascript
学习vue.js条件渲染
Dec 03 #Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
Dec 03 #Javascript
You might like
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
一个简单的PHP&MYSQL留言板源码
2020/07/19 PHP
php实现简单文件下载的方法
2015/01/30 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
javascript,jquery闭包概念分析
2010/06/19 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
Python中的元类编程入门指引
2015/04/15 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
python中if嵌套命令实例讲解
2021/02/25 Python
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
社会实践心得体会
2014/01/03 职场文书
运动会开幕式解说词
2014/02/05 职场文书
国贸专业求职信
2014/06/28 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android