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与webservice的通信实现代码
Dec 25 Javascript
jQuery$命名冲突怎么办如何解决
Jan 16 Javascript
中止javascript执行的方法
Feb 14 Javascript
node.js中的fs.statSync方法使用说明
Dec 16 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
May 25 Javascript
Bootstrap实现各种进度条样式详解
Apr 13 Javascript
Angularjs按需查询实例代码
Oct 30 Javascript
详解react-redux插件入门
Apr 19 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
Apr 30 Javascript
深入了解Hybrid App技术的相关知识
Jul 17 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
Dec 17 Javascript
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 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中批量替换文件名的实现代码
2011/07/20 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
12条写出高质量JS代码的方法
2018/01/07 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
Python socket编程实例详解
2015/05/27 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
浅析Git版本控制器使用
2017/12/10 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
网络编辑岗位职责
2014/03/18 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
青春雷锋观后感
2015/06/10 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python