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系列(6) 强大的原型和原型链
Jan 15 Javascript
解析URI与URL之间的区别与联系
Nov 22 Javascript
TypeScript具有的几个不同特质
Apr 07 Javascript
js实现防止被iframe的方法
Jul 03 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
玩转JavaScript OOP - 类的实现详解
Jun 08 Javascript
JavaScript 闭包机制详解及实例代码
Oct 10 Javascript
微信小程序实现滚动消息通知
Feb 02 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
Jul 03 Javascript
在create-react-app中使用sass的方法示例
Oct 01 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
Apr 25 Javascript
jquery实现进度条状态展示
Mar 26 jQuery
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
2006/12/13 PHP
用PHP生成html分页列表的代码
2007/03/18 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
Vue自定义指令详解
2017/07/28 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
python with statement 进行文件操作指南
2014/08/22 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
python实现flappy bird小游戏
2018/12/24 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
什么是数据抽象
2016/11/26 面试题
工伤事故赔偿协议书
2014/04/15 职场文书
社区维稳工作方案
2014/06/06 职场文书
毕业欢送会致辞
2015/07/29 职场文书
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫