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 相关文章推荐
toggle一个div显示或隐藏且可扩展成自定义下拉框
Sep 12 Javascript
jQuery aminate方法定位到页面具体位置
Dec 26 Javascript
js实现图片缓慢放大缩小效果
Aug 02 Javascript
JavaScript创建对象的七种方式(推荐)
Jun 26 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
Nov 28 Javascript
js阻止默认右键的下拉菜单方法
Jan 02 Javascript
Taro集成Redux快速上手的方法示例
Jun 21 Javascript
Vue 处理表单input单行文本框的实例代码
May 09 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
Sep 26 Javascript
Element Tooltip 文字提示的使用示例
Jul 26 Javascript
Openlayers实现地图全屏显示
Sep 28 Javascript
JavaScript实现刮刮乐效果
Nov 01 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
python连接oracle数据库实例
2014/10/17 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
shell的种类有哪些
2015/04/15 面试题
优秀毕业生求职信
2014/06/05 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
贷款承诺书
2015/01/20 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB