JavaScript中filter的用法实例分析


Posted in Javascript onFebruary 27, 2019

本文实例讲述了JavaScript中filter的用法。分享给大家供大家参考,具体如下:

filter

filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。

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以下的版本没有trim()方法
});
r; // ['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的重复元素:

'use strict';
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());

运行结果:

apple,strawberry,banana,pear,orange

去除重复元素依靠的是indexOf总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了。

尝试用filter()筛选出素数:

'use strict';
function get_primes(arr) {
  var i;
  return arr.filter(function (element) {
      var flag=true;
      if(element<2){
      flag=false;
    }else {
      for(var i=2;i<element;i++){
        if (element%i==0){
          flag=false;
          break;
        }
      }
    }
    return flag;
  });
}
// 测试:
var
  x,
  r,
  arr = [];
for (x = 1; x < 100; x++) {
  arr.push(x);
}
r = get_primes(arr);
if (r.toString() === [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97].toString()) {
  console.log('测试通过!');
} else {
  console.log('测试失败: ' + r.toString());
}

运行结果:

测试通过!

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

Javascript 相关文章推荐
javascript 函数速查表
Feb 07 Javascript
基于jquery实现的可编辑下拉框实现代码
Aug 02 Javascript
JavaScript极简入门教程(一):基础篇
Oct 25 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
Aug 08 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
ReactJs实现树形结构的数据显示的组件的示例
Aug 18 Javascript
五步轻松实现JavaScript HTML时钟效果
Mar 25 Javascript
vue引入axios同源跨域问题
Sep 27 Javascript
如何在微信小程序里面退出小程序的方法
Apr 28 Javascript
ES6中异步对象Promise用法详解
Jul 31 Javascript
JS 自执行函数原理及用法
Aug 05 Javascript
javascript中闭包closure的深入讲解
Mar 03 Javascript
jQuery中each和js中forEach的区别分析
Feb 27 #jQuery
简单了解node npm cnpm的具体使用方法
Feb 27 #Javascript
js中对象与对象创建方法的各种方法
Feb 27 #Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 #Javascript
react的滑动图片验证码组件的示例代码
Feb 27 #Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 #jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
Feb 27 #jQuery
You might like
php str_replace的替换漏洞
2008/03/15 PHP
PHP MVC模式在网站架构中的实现分析
2010/03/04 PHP
php设计模式 Singleton(单例模式)
2011/06/26 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
一些mootools的学习资源
2010/02/07 Javascript
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
Python实现的最近最少使用算法
2015/07/10 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
python进行两个表格对比的方法
2018/06/27 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
毕业生优秀推荐信
2013/11/26 职场文书
中国文明网签名寄语
2014/01/18 职场文书
人资专员岗位职责
2014/04/04 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers