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 相关文章推荐
js 弹出框只弹一次(二次修改之后的)
Nov 26 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
Jun 24 Javascript
jQuery视差滚动效果网页实现方法经验总结
Sep 29 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
Oct 19 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
Nov 26 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
Feb 03 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
Mar 05 Javascript
vue click.stop阻止点击事件继续传播的方法
Sep 04 Javascript
webpack HappyPack实战详解
Oct 08 Javascript
JS函数参数的传递与同名参数实例分析
Mar 16 Javascript
Vue-resource安装过程及使用方法解析
Jul 21 Javascript
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
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绿色集成环境详解
2017/01/25 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
vue的for循环使用方法
2019/02/12 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
2020/02/16 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
解决vue scoped html样式无效的问题
2020/10/24 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
python海龟绘图实例教程
2014/07/24 Python
跟老齐学Python之网站的结构
2014/10/24 Python
Python Paramiko模块的安装与使用详解
2016/11/18 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
Python补齐字符串长度的实例
2018/11/15 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
EJB实例的生命周期
2016/10/28 面试题
工地门卫岗位职责
2013/12/30 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
单位成立周年感言
2014/01/26 职场文书
高中生操行评语大全
2014/04/25 职场文书
计算机求职信
2014/07/02 职场文书
大学生实习推荐信
2015/03/27 职场文书