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 相关文章推荐
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
Sep 26 Javascript
公共js在页面底部加载的注意事项介绍
Jul 18 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
Jun 06 Javascript
jQuery焦点图切换简易插件制作过程全纪录
Aug 27 Javascript
js 左右悬浮对联广告代码示例
Dec 12 Javascript
Javascript实现的简单右键菜单类
Sep 23 Javascript
jquery实现select选择框内容左右移动代码分享
Nov 21 Javascript
javascript获取select标签选中的值
Jun 04 Javascript
详解angularjs 关于ui-router分层使用
Jun 12 Javascript
js中DOM事件绑定分析
Mar 18 Javascript
Layui给switch添加响应事件的例子
Sep 03 Javascript
微信小程序图片右边加两行文字的代码
Apr 23 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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
PHP 检查扩展库或函数是否可用的代码
2010/04/06 PHP
php实现无限级分类
2014/12/24 PHP
试用php中oci8扩展
2015/06/18 PHP
PHP制作用户注册系统
2015/10/23 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
csdn 博客的css样式 v3
2009/02/24 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
pandas中ix的使用详细讲解
2020/03/09 Python
django的autoreload机制实现
2020/06/03 Python
技能比武方案
2014/05/21 职场文书
追讨欠款律师函
2015/05/27 职场文书
思想工作总结范文
2015/08/12 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis