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 相关文章推荐
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
Mar 26 Javascript
javascript动态判断html元素并执行不同的操作
Jun 16 Javascript
JavaScript实现SHA-1加密算法的方法
Mar 11 Javascript
javascript多行字符串的简单实现方式
May 04 Javascript
深入浅析JavaScript中的scrollTop
Jul 11 Javascript
深入理解javascript中的 “this”
Jan 17 Javascript
Angular.js基础学习之初始化
Mar 10 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
Sep 20 Javascript
深入理解React高阶组件
Sep 28 Javascript
vue登录注册实例详解
Sep 14 Javascript
uni-app如何实现增量更新功能
Jan 03 Javascript
小程序实现上传视频功能
Aug 18 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
js闭包实例汇总
2014/11/09 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
收集的几个Python小技巧分享
2014/11/22 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
python非递归全排列实现方法
2017/04/10 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
python requests 测试代理ip是否生效
2018/07/25 Python
python使用matplotlib绘制热图
2018/11/07 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
用python解压分析jar包实例
2020/01/16 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
保护环境建议书
2014/03/12 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
工会工作个人总结
2015/03/03 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
Python字符串的转义字符
2022/04/07 Python