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 相关文章推荐
Wordpress ThickBox 点击图片显示下一张图的修改方法
Dec 11 Javascript
JavaScript对象学习小结
Sep 02 Javascript
理解jquery事件冒泡
Jan 03 Javascript
使用开源工具制作网页验证码的方法
Oct 17 Javascript
javascript实现无法关闭的弹框
Nov 27 Javascript
JS实战篇之收缩菜单表单布局
Dec 10 Javascript
简单介绍react redux的中间件的使用
Apr 06 Javascript
微信小程序实现蒙版弹窗效果
Nov 01 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 Javascript
JS中超越现实的匿名函数用法实例分析
Jun 21 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
Sep 16 Javascript
关于ES6尾调用优化的使用
Sep 11 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
thinkphp控制器调度使用示例
2014/02/24 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python找出9个连续的空闲端口
2016/02/01 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
Python3 socket同步通信简单示例
2017/06/07 Python
python leetcode 字符串相乘实例详解
2018/09/03 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
大学生的自我鉴定范文
2014/01/21 职场文书
幼儿园六一亲子活动方案
2014/08/26 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
HttpClient实现文件上传功能
2022/08/14 Java/Android