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 相关文章推荐
document.all还是document.getElementsByName?
Jul 21 Javascript
JQuery的ajax基础上的超强GridView展示
Sep 18 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
Jun 26 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
JS实现在网页中弹出一个输入框的方法
Mar 03 Javascript
jQuery使用post方法提交数据实例
Mar 25 Javascript
很棒的js Tab选项卡切换效果
Aug 30 Javascript
Jquery鼠标放上去显示全名的实现方法
Feb 06 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
Mar 09 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 Javascript
JS highcharts实现动态曲线代码示例
Oct 16 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
一个简单的PHP&MYSQL留言板源码
2020/07/19 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
PHP缓冲区用法总结
2016/02/14 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
angular4自定义组件详解
2017/09/28 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
使用Python生成随机密码的示例分享
2016/02/18 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
意大利奢侈品网站:Italist
2016/08/23 全球购物
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
英文版销售经理个人求职信
2013/11/20 职场文书
个人自我评价分享
2013/12/20 职场文书
建筑工地文明标语
2014/10/09 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
Python的三个重要函数详解
2022/01/18 Python