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实现的一个include函数
Jul 21 Javascript
JavaScript解析json格式数据简单示例
Dec 09 Javascript
Javascript函数的参数
Jul 16 Javascript
微信支付如何实现内置浏览器的H5页面支付
Sep 25 Javascript
window.open不被拦截的简单实现代码(推荐)
Aug 04 Javascript
Javascript Event(事件)的传播与冒泡
Jan 23 Javascript
JavaScript评论点赞功能的实现方法
Mar 13 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
Aug 23 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 jQuery
微信小程序wx.navigateTo方法里的events参数使用详情及场景
Jan 07 Javascript
es6函数之严格模式用法实例分析
Mar 17 Javascript
js实现简易ATM功能
Oct 27 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
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
Ajax 数据请求的简单分析
2011/04/05 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
从django的中间件直接返回请求的方法
2018/05/30 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
C#笔试题集合
2013/06/21 面试题
岗位说明书范文
2014/05/07 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
党员批评与自我批评
2014/10/15 职场文书
项目负责人岗位职责
2015/02/15 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python