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 相关文章推荐
jquery png 透明解决方案(推荐)
Aug 21 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
Aug 18 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
js制作网站首页图片轮播特效代码
Aug 30 Javascript
基于javascript实现按圆形排列DIV元素(二)
Dec 02 Javascript
jQuery弹出窗口打开链接的实现代码
Dec 24 Javascript
详解vue-router 2.0 常用基础知识点之router-link
May 10 Javascript
用vue封装插件并发布到npm的方法步骤
Oct 18 Javascript
新手入门带你学习JavaScript引擎运行原理
Jun 24 Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
Mar 03 Javascript
react antd实现动态增减表单
Jun 03 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
为你总结一些php信息函数
2015/10/21 PHP
php加密解密字符串示例
2016/10/13 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
python3.6编写的单元测试示例
2019/08/17 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
Django url 路由匹配过程详解
2021/01/22 Python
智能旅行箱:Horizn Studios
2018/04/30 全球购物
旅游管理专业生自荐信范文
2014/01/02 职场文书
《问银河》教学反思
2014/02/19 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
师德师风剖析材料
2014/09/30 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
行政处罚事先告知书
2015/07/01 职场文书
同乡会致辞
2015/07/30 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
创业计划书之水果店
2019/07/18 职场文书