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 ajax例子返回值详解
Sep 11 Javascript
向左滚动文字 js代码效果
Aug 17 Javascript
js Date概念详细介绍
Nov 22 Javascript
jQuery固定元素插件scrolltofixed使用指南
Apr 21 Javascript
JavaScript知识点整理
Dec 09 Javascript
jQuery Validate 校验多个相同name的方法
May 18 jQuery
react-native-tab-navigator组件的基本使用示例代码
Sep 07 Javascript
JS实现留言板功能[楼层效果展示]
Dec 27 Javascript
微信小程序实现滚动消息通知
Feb 02 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
Mar 26 Javascript
使用Vue自定义指令实现Select组件
May 24 Javascript
Vue实现微信支付功能遇到的坑
Jun 05 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
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
accesskey 提交
2006/06/26 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
详解vue中组件参数
2018/07/09 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
python网络编程学习笔记(一)
2014/06/09 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
django迁移数据库错误问题解决
2019/07/29 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
美容院考勤制度
2014/01/30 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
2016寒假假期总结
2015/10/10 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技